using System;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
namespace vnxbqy.UI
|
{
|
//ÏÉÃË»ÕÕ ½âËøÍ¾¾¶ÀàÐÍ
|
public enum FairyEmblemUnlockMethodType
|
{
|
Custom, // 0 - ¶¨ÖÆ
|
LV, // 1 - µÈ¼¶×Ô¶¯½âËø
|
Active, // 2 - »î¶¯»ñµÃ
|
}
|
|
public class FairyEmblemModel : Model, IBeforePlayerDataInitialize
|
{
|
public readonly int MaxItemRowCount = 6; // Ò»ÐÐչʾx¸ö»ÕÕÂ
|
public readonly int FamilyActionsType = 15; // ¼Ò×åÐÐΪÀàÐÍ15
|
public readonly int FuncId = 237;
|
public int defaultFamilyEmblemId; // ĬÈÏ»ÕÕÂID
|
|
public bool isSendA408Pack = false;
|
|
private int m_NowChooseEmblemId;
|
public int nowChooseEmblemId
|
{
|
get { return m_NowChooseEmblemId; }
|
set
|
{
|
m_NowChooseEmblemId = value;
|
ChooseEmblemIdChangeEvent?.Invoke();
|
}
|
}
|
|
//<EmblemId,FamilyAction>
|
Dictionary<int, HA403_tagGCFamilyActionInfo.tagGCFamilyAction> familyActions = new Dictionary<int, HA403_tagGCFamilyActionInfo.tagGCFamilyAction>();
|
|
public event Action ChooseEmblemIdChangeEvent; //Çл»±êǩҳ
|
public event Action<int, int> UpdateFamilyActionEvent;
|
|
Redpoint entranceRedPoint = new Redpoint(10702, MainRedDot.FairyEmbleManageRepoint); //ÏÉÃ˹ÜÀíÃæ°åÈë¿Úºìµã
|
|
public override void Init()
|
{
|
PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo;
|
defaultFamilyEmblemId = int.Parse(FuncConfigConfig.Get("FairyEmblem").Numerical1);
|
}
|
|
public override void UnInit()
|
{
|
PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
|
}
|
|
private void OnRefreshFairyInfo()
|
{
|
UpdateRedPoint();
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
familyActions.Clear();
|
}
|
|
public void UpdateRedPoint()
|
{
|
entranceRedPoint.state = RedPointState.None;
|
// ½öÃËÖ÷ÄÜ¿´µ½
|
if (!IsCaptain())
|
return;
|
// ÏÉÃË2¼¶³öÏÖ
|
if (PlayerDatas.Instance.fairyData == null || PlayerDatas.Instance.fairyData.fairy.FamilyLV != 2)
|
return;
|
// Ö»³öÏÖÒ»´Î
|
if (GetRedPointShow())
|
return;
|
entranceRedPoint.state = RedPointState.Simple;
|
}
|
|
string localStr = "FairyEmblemEntranceRedPoint_";
|
|
public bool GetRedPointShow()
|
{
|
return LocalSave.GetBool(localStr + PlayerDatas.Instance.PlayerId);
|
}
|
|
public void SetRedPointShow()
|
{
|
LocalSave.SetBool(localStr + PlayerDatas.Instance.PlayerId, true);
|
}
|
|
public bool TryGetNowEmblemID(out int nowID)
|
{
|
nowID = 0;
|
int emblemID = (int)PlayerDatas.Instance.fairyData.fairy.Extra6;
|
if (FamilyEmblemConfig.Has(emblemID) && IsUnLock(emblemID))
|
{
|
nowID = (int)emblemID;
|
return true;
|
}
|
|
if (FamilyEmblemConfig.Has(defaultFamilyEmblemId))
|
{
|
nowID = defaultFamilyEmblemId;
|
return true;
|
}
|
|
nowID = 0;
|
return false;
|
|
}
|
|
// չʾָ¶¨»ÕÕ ±íÖÐÕÒ²»µ½»ÕÕ¾ÍÏÔʾĬÈϵÄ
|
public void ShowEmblem(int emblemID, ImageEx imgTitle, float scale = 1.0f)
|
{
|
int nowEmblemID = emblemID;
|
if (!FamilyEmblemConfig.Has(nowEmblemID))
|
{
|
nowEmblemID = defaultFamilyEmblemId;
|
}
|
FamilyEmblemConfig config = FamilyEmblemConfig.Get(nowEmblemID);
|
UIFrame frame = imgTitle.GetComponent<UIFrame>();
|
if (UIFrameMgr.Inst.ContainsDynamicImage(config.Image))
|
{
|
if (frame == null)
|
frame = imgTitle.gameObject.AddComponent<UIFrame>();
|
|
List<UnityEngine.Sprite> spriteList = UIFrameMgr.Inst.GetDynamicImage(config.Image);
|
if (!spriteList.IsNullOrEmpty())
|
{
|
imgTitle.rectTransform.sizeDelta = new Vector2(spriteList[0].rect.width, spriteList[0].rect.height);
|
}
|
|
imgTitle.raycastTarget = false;
|
frame.ResetFrame(config.Image);
|
frame.enabled = true;
|
}
|
else
|
{
|
if (frame != null)
|
frame.enabled = false;
|
imgTitle.SetSprite(config.Image);
|
imgTitle.SetNativeSize();
|
}
|
imgTitle.rectTransform.localScale = new Vector3(scale, scale, scale);
|
}
|
|
//·¢°ü ²éÑ¯Íæ¼Òµ±Ç°ÏÉÃË»ÕÕÂ
|
public void TrySendA408EmblemInfoPack()
|
{
|
//ÒѾ·¢¹ý°üÁË
|
if (isSendA408Pack)
|
return;
|
isSendA408Pack = true;
|
var pack = new CA408_tagCGQueryFamilyAction();
|
pack.ActionType = 15;
|
pack.FamilyID = PlayerDatas.Instance.baseData.FamilyId;
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
|
//·¢°ü ¸ü¸ÄÏÉÃË»ÕÕÂ
|
public void SendCA413ChangeFamilyEmblemPack(int emblemId)
|
{
|
var pack = new CA413_tagCGChangeFamilyEmblem();
|
pack.EmblemID = (byte)emblemId;
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
|
public List<int> GetShowList()
|
{
|
List<int> showList = new List<int>();
|
List<string> keys = FamilyEmblemConfig.GetKeys();
|
for (int i = 0; i < keys.Count; i++)
|
{
|
showList.Add(int.Parse(keys[i]));
|
}
|
showList.Sort(Cmp);
|
return showList;
|
}
|
|
// ÒѼ¤»î>δ¼¤»î
|
private int Cmp(int a, int b)
|
{
|
bool isUnlock1 = IsUnLock(a);
|
bool isUnlock2 = IsUnLock(b);
|
|
if (isUnlock1 != isUnlock2)
|
{
|
return isUnlock2.CompareTo(isUnlock1);
|
}
|
|
// Èç¹û¼¤»î״̬Ïàͬ£¬±È½ÏÊÇ·ñΪÏÞʱ£ºÏÞʱ (true) > ÓÀ¾Ã (false)
|
bool isLimitA = IsLimitTime(a, out var familyAction1);
|
bool isLimitB = IsLimitTime(b, out var familyAction2);
|
|
if (isLimitA != isLimitB)
|
{
|
return isLimitB.CompareTo(isLimitA);
|
}
|
|
// ÏÞʱ״̬Ïàͬ£¬±È½Ï SortNum
|
int sortNumA = GetSortNum(a);
|
int sortNumB = GetSortNum(b);
|
if (sortNumA != sortNumB)
|
{
|
return sortNumA.CompareTo(sortNumB);
|
}
|
|
return a.CompareTo(b);
|
}
|
|
public int GetSortNum(int emblemID)
|
{
|
if (!FamilyEmblemConfig.Has(emblemID))
|
return 0;
|
return FamilyEmblemConfig.Get(emblemID).SortNum;
|
}
|
|
// »ñµÃ»ÕÕÂÀ´Ô´ÀàÐÍ
|
public FairyEmblemUnlockMethodType GetFairyEmblemUnlockType(int emblemID)
|
{
|
FamilyEmblemConfig config = FamilyEmblemConfig.Get(emblemID);
|
if (config == null)
|
return FairyEmblemUnlockMethodType.LV;
|
if (config.CustomFamilyID > 0)
|
return FairyEmblemUnlockMethodType.Custom;
|
return config.UnlockFamilyLV > 0 ? FairyEmblemUnlockMethodType.LV : FairyEmblemUnlockMethodType.Active;
|
}
|
|
// Ö¸¶¨µÄ»ÕÕ½âËøÁËÂð
|
public bool IsUnLock(int emblemId)
|
{
|
FamilyEmblemConfig config = FamilyEmblemConfig.Get(emblemId);
|
FairyEmblemUnlockMethodType type = GetFairyEmblemUnlockType(emblemId);
|
HA403_tagGCFamilyActionInfo.tagGCFamilyAction familyAction;
|
switch (type)
|
{
|
case FairyEmblemUnlockMethodType.Custom:
|
//ËùÔÚÏÉÃ˲»ÊÇÖ¸¶¨µÄ¶¨ÖÆÏÉÃË Î´½âËø
|
if (PlayerDatas.Instance.baseData.FamilyId != config.CustomFamilyID)
|
return false;
|
//·â°üÖÐûÓоÍËãδ½âËø
|
if (!TryGetfamilyAction(emblemId, out familyAction))
|
return false;
|
if (familyAction.Value2 > 0 && familyAction.Value2 < TimeUtility.AllSeconds)
|
return false;
|
return true;
|
|
case FairyEmblemUnlockMethodType.LV:
|
//ËùÔÚÏÉÃ˵ȼ¶Ð¡ÓÚ»ÕÕÂÒªÇóµÈ¼¶ δ½âËø
|
if (PlayerDatas.Instance.fairyData.fairy.FamilyLV < config.UnlockFamilyLV)
|
return false;
|
return true;
|
|
case FairyEmblemUnlockMethodType.Active:
|
//·â°üÖÐûÓоÍËãδ½âËø
|
if (!TryGetfamilyAction(emblemId, out familyAction))
|
return false;
|
if (familyAction.Value2 > 0 && familyAction.Value2 < TimeUtility.AllSeconds)
|
return false;
|
return true;
|
|
default:
|
return false;
|
}
|
}
|
|
public bool IsUsing(int emblemId)
|
{
|
if (!TryGetNowEmblemID(out int Id))
|
{
|
return false;
|
}
|
return emblemId == Id;
|
}
|
|
public bool IsLimitTime(int emblemId, out HA403_tagGCFamilyActionInfo.tagGCFamilyAction familyAction)
|
{
|
familyAction = new HA403_tagGCFamilyActionInfo.tagGCFamilyAction();
|
FamilyEmblemConfig config = FamilyEmblemConfig.Get(emblemId);
|
FairyEmblemUnlockMethodType type = GetFairyEmblemUnlockType(emblemId);
|
switch (type)
|
{
|
case FairyEmblemUnlockMethodType.LV:
|
return false;
|
|
case FairyEmblemUnlockMethodType.Custom:
|
case FairyEmblemUnlockMethodType.Active:
|
if (config.ExpireMinutes <= 0)
|
return false;
|
if (!TryGetfamilyAction(emblemId, out familyAction))
|
return false;
|
return true;
|
|
default:
|
return false;
|
}
|
}
|
|
public bool IsCaptain()
|
{
|
return (int)PlayerDatas.Instance.fairyData.mine.FamilyLV == 3;
|
}
|
|
// ³¢ÊÔ´Ó·â°üÖеõ½Ö¸¶¨µÄ»ÕÕÂʱЧÐÅÏ¢£¨»î¶¯Í¾¾¶»ñÈ¡µÄ»ÕÕÂ,¶¨ÖÆ»ÕÕ£©
|
private bool TryGetfamilyAction(int emblemId, out HA403_tagGCFamilyActionInfo.tagGCFamilyAction familyAction)
|
{
|
familyAction = new HA403_tagGCFamilyActionInfo.tagGCFamilyAction();
|
if (!familyActions.TryGetValue(emblemId, out var info) || info == null)
|
return false;
|
familyAction = info;
|
return true;
|
}
|
|
public bool TryGetEffectID(int emblemId, out int effectID)
|
{
|
effectID = 0;
|
if (!FamilyEmblemConfig.Has(emblemId))
|
return false;
|
FamilyEmblemConfig config = FamilyEmblemConfig.Get(emblemId);
|
if (!EffectConfig.Has(config.EffectID))
|
return false;
|
effectID = config.EffectID;
|
return true;
|
}
|
|
public void UpdateFamilyAction(HA403_tagGCFamilyActionInfo vNetData)
|
{
|
if (vNetData.ActionType != FamilyActionsType || PlayerDatas.Instance.baseData == null || (int)vNetData.FamilyID != (int)PlayerDatas.Instance.baseData.FamilyId)
|
return;
|
for (int i = 0; i < vNetData.FamilyActionList.Length; i++)
|
{
|
HA403_tagGCFamilyActionInfo.tagGCFamilyAction familyAction = vNetData.FamilyActionList[i];
|
familyActions[(int)familyAction.Value1] = familyAction;
|
}
|
UpdateFamilyActionEvent?.Invoke((int)vNetData.FamilyID, vNetData.ActionType);
|
}
|
}
|
}
|