using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
namespace vnxbqy.UI
|
{
|
|
public class TitleModel : Model, IBeforePlayerDataInitialize,IPlayerLoginOk
|
{
|
const string TITLEKEY = "Title";
|
|
public int selectTitleId; //点击升星的称号ID 和 presentSelectTitle 不一样用处
|
public bool reikiPointRemindSymble { get; private set; }
|
|
public Dictionary<int, int> titleStarDict = new Dictionary<int, int>(); //称号ID:星级
|
public event Action OnTitleStarUpdate;
|
|
public Dictionary<int, Redpoint> titleStarRedpoints = new Dictionary<int, Redpoint>();
|
|
ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } }
|
PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
public override void Init()
|
{
|
//GlobalTimeEvent.Instance.secondEvent += SecondEvent;
|
StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish;
|
WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
|
|
foreach (var _id in TitleStarUpConfig.titleIDToIDs.Keys)
|
{
|
titleStarRedpoints.Add(_id, new Redpoint(1010104, 1010104*1000 + _id));
|
}
|
}
|
|
public override void UnInit()
|
{
|
//GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
|
StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish;
|
WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent;
|
}
|
|
private void OnStageLoadFinish()
|
{
|
reikiPointRemindSymble = false;
|
}
|
|
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();
|
// }
|
// }
|
// }
|
//}
|
|
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 (reikiRootModel.titleAddPoint.titleId == id)
|
{
|
TryOpenReikiRootPointRemind();
|
}
|
}
|
if (OnRefreshGainTitle != null)
|
{
|
OnRefreshGainTitle();
|
}
|
UpdateRedpoint();
|
AutoUseTile();
|
}
|
|
//第一个称号自动佩戴
|
void AutoUseTile()
|
{
|
if (roletitles.Count == 1)
|
{
|
var titles = roletitles.Keys.ToList();
|
C0337_tagCPlayerChangeDienstgrad equipTitlePack = new C0337_tagCPlayerChangeDienstgrad();
|
equipTitlePack.GradID = (uint)titles[0];
|
equipTitlePack.State = 1;
|
GameNetSystem.Instance.SendInfo(equipTitlePack);
|
}
|
}
|
|
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();
|
}
|
|
private void WindowAfterOpenEvent(Window window)
|
{
|
if (reikiPointRemindSymble && window is RoleTitle)
|
{
|
TryOpenReikiRootPointRemind();
|
}
|
|
if (window is KnapSackWin)
|
{
|
UpdateRedpoint();
|
}
|
}
|
|
void TryOpenReikiRootPointRemind()
|
{
|
if (WindowCenter.Instance.IsOpen<RoleTitle>())
|
{
|
reikiPointRemindSymble = false;
|
var reikiPoint = 0;
|
if (PlayerDatas.Instance.baseData.LV >= reikiRootModel.reikiPointAutoAddLevel)
|
{
|
var level = PlayerDatas.Instance.baseData.LV - reikiRootModel.reikiPointAutoAddLevel + 1;
|
reikiPoint = level * reikiRootModel.titleAddPoint.point;
|
}
|
var titleConfig = DienstgradConfig.Get(reikiRootModel.titleAddPoint.titleId);
|
ConfirmCancel.ShowRealmPopConfirm(Language.Get("Mail101"),
|
Language.Get("ReikiRootAddPointRemind_2", titleConfig.Name, reikiPoint),
|
Language.Get("GotoAddPoint"), () =>
|
{
|
WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.RolePoint);
|
});
|
}
|
else
|
{
|
reikiPointRemindSymble = true;
|
}
|
}
|
|
|
|
public void UpdateTitleStarInfo(HA3CE_tagMCTitleStarInfo netPack)
|
{
|
for (int i = 0; i < netPack.TitleStarList.Length; i++)
|
{
|
titleStarDict[(int)netPack.TitleStarList[i].TitleID] = netPack.TitleStarList[i].Star;
|
}
|
OnTitleStarUpdate?.Invoke();
|
|
UpdateRedpoint();
|
}
|
|
public int GetTitleStar(int titleId)
|
{
|
int star = 0;
|
titleStarDict.TryGetValue(titleId, out star);
|
return star;
|
}
|
|
public bool IsStarRedpoint(int titleID)
|
{
|
if (titleStarRedpoints.ContainsKey(titleID))
|
{
|
return titleStarRedpoints[titleID].state == RedPointState.Simple;
|
}
|
return false;
|
}
|
|
#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 (TitleStarUpConfig.titleIDToIDs.ContainsKey(_key))
|
{
|
var star = GetTitleStar(_key);
|
var maxStar = TitleStarUpConfig.titleIDToIDs[_key].Count;
|
titleStarRedpoints[_key].state = RedPointState.None;
|
if (star < maxStar)
|
{
|
var id = TitleStarUpConfig.titleIDToIDs[_key][star];
|
var config = TitleStarUpConfig.Get(id);
|
if (packModel.GetItemCountByID(PackType.Item, config.StarUpNeedItemList[0][0]) >= config.StarUpNeedItemList[0][1])
|
{
|
titleStarRedpoints[_key].state = RedPointState.Simple;
|
}
|
}
|
}
|
}
|
}
|
#endregion
|
}
|
|
public class TitleData
|
{
|
public int id;
|
public bool isEquiped;
|
public DateTime gainTime;
|
//public uint expireTime;
|
|
public bool outTimeNotify = false;
|
}
|
}
|
|