using System.Collections.Generic;
|
using LitJson;
|
public class BoneFieldManager : GameSystemManager<BoneFieldManager>
|
{
|
|
public readonly int DataMapID = 30010; // 白骨盈野(战锤秘境)
|
public readonly int MinStartLineID = 1; // funcLineID从1开始
|
public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.BoneFieldRepoint);
|
public override void Init()
|
{
|
DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent;
|
AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent;
|
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent += OnPlayerDataRefresh;
|
TimeMgr.Instance.OnDayEvent += OnDayEvent;
|
}
|
|
public override void Release()
|
{
|
DungeonManager.Instance.UpdateFBInfoListEvent -= OnUpdateFBInfoChangeEvent;
|
AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent;
|
FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
|
PlayerDatas.Instance.playerDataRefreshEvent -= OnPlayerDataRefresh;
|
TimeMgr.Instance.OnDayEvent -= OnDayEvent;
|
}
|
|
private void OnFuncStateChangeEvent(int obj)
|
{
|
if (obj != (int)FuncOpenEnum.BoneBattle)
|
return;
|
UpdateRedPoint();
|
}
|
|
private void OnDayEvent()
|
{
|
UpdateRedPoint();
|
}
|
|
private void OnUpdateFBInfoChangeEvent(int mapID)
|
{
|
int dataMapID = DataMapID;
|
if (mapID != dataMapID)
|
return;
|
|
UpdateRedPoint();
|
}
|
|
private void OnAdsInfoListUpdateEvent(int id, int type, int mapId)
|
{
|
if (mapId != DataMapID)
|
return;
|
UpdateRedPoint();
|
}
|
|
private void OnPlayerDataRefresh(PlayerDataType type)
|
{
|
if (type == PlayerDataType.FightPower)
|
{
|
UpdateRedPoint();
|
}
|
else if (type == PlayerDataType.LV)
|
{
|
UpdateRedPoint();
|
}
|
}
|
|
public void UpdateRedPoint()
|
{
|
parentRedpoint.state = RedPointState.None;
|
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.BoneBattle))
|
return;
|
|
bool isShowChallengeRed = IsShowChallengeRed();
|
if (isShowChallengeRed)
|
{
|
parentRedpoint.state = RedPointState.Simple;
|
return;
|
}
|
|
bool isShowSweepRed = IsShowSweepRed();
|
if (isShowSweepRed)
|
{
|
parentRedpoint.state = RedPointState.Simple;
|
return;
|
}
|
|
}
|
public bool IsShowChallengeRed()
|
{
|
if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
|
return false;
|
bool isHasNextLineID = IsHasNextLineID(fbInfo);
|
int nowPassLineID = GetNowPassLineID(fbInfo);
|
DungeonConfig.TryGetDungeonID(DataMapID, nowPassLineID, out int dungeonID);
|
if (!DungeonConfig.HasKey(dungeonID))
|
return false;
|
DungeonConfig dungeonConfig = DungeonConfig.Get(dungeonID);
|
bool isLvOk = PlayerDatas.Instance.baseData.LV >= dungeonConfig.LVLimitMin;
|
long myFightPower = PlayerDatas.Instance.baseData.FightPower;
|
return isLvOk && isHasNextLineID && myFightPower >= dungeonConfig.FightPower;
|
}
|
|
public bool IsShowSweepRed()
|
{
|
bool isNoChallenge = IsNoChallenge();
|
if (isNoChallenge)
|
return false;
|
if (TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount))
|
{
|
bool isSweepCountOk = showrealRemainSweepCount > 0;
|
if (isSweepCountOk)
|
{
|
return true;
|
}
|
}
|
return false;
|
}
|
|
public bool IsNoChallenge()
|
{
|
if (!DungeonManager.Instance.TryGetFBInfoByMapID(DataMapID, out var fbInfo))
|
return true;
|
return fbInfo.PassLineID <= 0;
|
}
|
|
public bool IsHasNextLineID(FBInfo fBInfo)
|
{
|
int passLineID = (int)fBInfo.PassLineID;
|
int nextPassLineID = passLineID + 1;
|
return DungeonConfig.TryGetDungeonID(DataMapID, nextPassLineID, out int dungeonID);
|
}
|
|
public int GetNowPassLineID(FBInfo fBInfo)
|
{
|
int passLineID = (int)fBInfo.PassLineID;
|
if (passLineID < MinStartLineID)
|
return MinStartLineID;
|
int nextPassLineID = passLineID + 1;
|
if (!DungeonConfig.TryGetDungeonID(DataMapID, nextPassLineID, out int nextDungeonID))
|
return passLineID;
|
return nextPassLineID;
|
}
|
|
public bool TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount)
|
{
|
if (!DungeonManager.Instance.TryGetDungeonCount(DataMapID, out showSweepMaxCount, out showrealRemainSweepCount))
|
return false;
|
|
return true;
|
}
|
|
public void SendBBeginFBWipeOut(int mapID, int lineID)
|
{
|
CA505_tagCMBeginFBWipeOut pack = new CA505_tagCMBeginFBWipeOut();
|
pack.MapID = (uint)mapID;
|
pack.LineID = (ushort)lineID;
|
pack.Cnt = 1;
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
|
public void SendBuyEnterCount(int FBID)
|
{
|
var pack = new CA575_tagCMBuyEnterCount();
|
pack.FBID = (uint)FBID; // 副本ID
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
|
public void UpdateFBEnd(H0320_tagFBEnd vNetData)
|
{
|
if (vNetData.Msg == null)
|
return;
|
ChallengeResultData result = ChallengeResultData.FromJson(vNetData.Msg);
|
if (result == null || result.itemInfo.IsNullOrEmpty())
|
return;
|
if (result.dataMapID != DataMapID)
|
return;
|
List<Item> showItems = new List<Item>();
|
foreach (var item in result.itemInfo)
|
{
|
Item tempItem = new Item(item.ItemID, item.Count, _useType: item.BeautyEx != 0 ? 2 : 0);
|
showItems.Add(tempItem);
|
}
|
ItemLogicUtility.Instance.ShowGetItem(showItems, isMergeItem: false);
|
}
|
|
public class ItemInfo
|
{
|
public int ItemID { get; set; }
|
public int Count { get; set; }
|
public int BeautyEx { get; set; }
|
}
|
|
public class ChallengeResultData
|
{
|
public int dataMapID { get; set; }
|
public List<ItemInfo> itemInfo { get; set; }
|
public int lineID { get; set; }
|
public int isPass { get; set; }
|
public int isSweep { get; set; }
|
|
public static ChallengeResultData FromJson(string json)
|
{
|
return JsonMapper.ToObject<ChallengeResultData>(json);
|
}
|
}
|
}
|