using System.Collections.Generic; using System.Linq; using Core.Event.Event; using Excel2Json; using Fort23.Core; using Fort23.Mono; using Fort23.UTool; using GameLogic.Hero; using Mono; using UnityEngine; using Utility; public class RedDotManager : Singleton { public Map AllRedDotGroupData = new Map(); // /// // /// 服务器保存的红点信息; // /// // private Map RedDots = new Map(); public void AddRedDot(AccountFileInfo.RedDot redDot) { AccountFileInfo.RedDot redDot1 = GetRedDot(redDot.id); if (redDot1 != null) { redDot1 = redDot; } else { AccountFileInfo.Instance.playerData.RedDotDatas.Add(redDot); } AccountFileInfo.Instance.SavePlayerData(); } public AccountFileInfo.RedDot GetRedDot(int id) { AccountFileInfo.RedDot redDot = AccountFileInfo.Instance.playerData.RedDotDatas.FirstOrDefault(r => r.id == id); if (redDot == null) { return null; } return redDot; } /// /// 所有红点检测注入 /// public void Init() { ReddotConfig[] reddotConfigs = ConfigComponent.Instance.GetAll(); foreach (var reddotConfig in reddotConfigs) { if (AllRedDotGroupData.TryGetValue(reddotConfig.GroupID, out var value)) { value.AddRedDotData(reddotConfig.ID); } else { RedDotGroupData redDotGroupData = new RedDotGroupData(); redDotGroupData.Init(reddotConfig.ID); AllRedDotGroupData.Add(reddotConfig.GroupID, redDotGroupData); } } } /// /// 改变红点状态 /// /// 对应红点id /// 0是关闭 1是开启 public void ChangeStateRedDot(int redDotConfigId, int type) { ReddotConfig reddotConfig = ConfigComponent.Instance.Get(redDotConfigId); if (reddotConfig.ID == 0) { LogTool.Log("红点id找不到:" + redDotConfigId); return; } if (AllRedDotGroupData.Count <= 0) return; if (type == 0) { AllRedDotGroupData[reddotConfig.GroupID].AllRedDotData[reddotConfig.Layer][redDotConfigId].isEnable = false; } else { AllRedDotGroupData[reddotConfig.GroupID].AllRedDotData[reddotConfig.Layer][redDotConfigId].isEnable = true; } AllRedDotUpDate(); } /// /// /// /// /// 1打开0关闭 public void TempChangeStateRedDot(int redDotConfigId, int type) { ReddotConfig reddotConfig = ConfigComponent.Instance.Get(redDotConfigId); EventManager.Instance.Dispatch(CustomEventType.RedDotChangeState, new DefaultEventData() { eventData = new[] { redDotConfigId, type } }); } /// /// 所有红点更新 /// public void AllRedDotUpDate() { EventManager.Instance.Dispatch(CustomEventType.RedDotUpdate, new DefaultEventData() { eventData = 0 }); } /// /// 指定某个红点组更新 /// /// public void TarGetRedDotUpDate(int targetGroupId) { if (AllRedDotGroupData.ContainsKey(targetGroupId)) { ReddotConfig reddotConfig = ConfigComponent.Instance.Get(AllRedDotGroupData[targetGroupId].Id); if (reddotConfig.LinkGroupID != null) { foreach (var i in reddotConfig.LinkGroupID) { EventManager.Instance.Dispatch(CustomEventType.RedDotUpdate, new DefaultEventData() { eventData = i }); } } } EventManager.Instance.Dispatch(CustomEventType.RedDotUpdate, new DefaultEventData() { eventData = targetGroupId }); } public bool TargetRedDotIsEnable(int redDotConfigID) { if (AllRedDotGroupData.Count <= 0) { return false; } ReddotConfig reddotConfig = ConfigComponent.Instance.Get(redDotConfigID); if (reddotConfig.ID == 0) { // LogTool.Log("红点id找不到:" + redDotConfigID); return false; } bool isEnable = false; if (reddotConfig.LinkGroupID != null) { foreach (var groupID in reddotConfig.LinkGroupID) //遍历link的组 { if (AllRedDotGroupData.ContainsKey(groupID)) { foreach (var keyValuePair in AllRedDotGroupData[groupID].AllRedDotData) //遍历所有layer的红点 { foreach (var redDotData in keyValuePair.Value) //遍历某一个layer的红点 { ReddotConfig _redDotConfig = ConfigComponent.Instance.Get(redDotData.Value.Id); //具体某一个红点 if (TargetRedDotIsEnable(_redDotConfig.ID)) { isEnable = true; break; } } } } } } else { AllRedDotGroupData[reddotConfig.GroupID].Update(); if (AllRedDotGroupData[reddotConfig.GroupID].TargetLayerIsEnable(reddotConfig.Layer)) { isEnable = true; } } return isEnable; } public bool TargetRedDotIsEnable2(int redDotConfigID) { bool isEnable = false; ReddotConfig reddotConfig = ConfigComponent.Instance.Get(redDotConfigID); AllRedDotGroupData[reddotConfig.GroupID].Update(); if (AllRedDotGroupData[reddotConfig.GroupID].TargetLayerIsEnable(reddotConfig.Layer)) { isEnable = true; } return isEnable; } public bool TargetRedDotIsEnableForType01(int redDotGroupID, object value) { switch (redDotGroupID) { case 2: return isSkillUpgrade(value as SkillInfo); case 9: object[] objects = value as object[]; return IsFabaoUpgrade1((int)objects[1], objects[0] as FaBaoInfo); case 10: return IsFabaoUpgrade(value as FaBaoInfo); break; } return false; } public bool isSkillUpgrade(SkillInfo _skillInfo) { var _skillPowerupConfigs = ConfigComponent.Instance.GetAll(); if (_skillInfo.SkillData.level >= _skillPowerupConfigs.Length) { return false; } if (PlayerManager.Instance.myHero.level.Value < _skillInfo.SkillPowerupConfig.PlayerLevelLimit) { return false; } for (var i = 0; i < _skillInfo.SkillPowerupConfig.LevelupItem.Length; i++) { if (!PlayerManager.Instance.BagController.IsEnough(_skillInfo.SkillPowerupConfig.LevelupItem[i], _skillInfo.SkillPowerupConfig.LevelupItemNum[i])) { return false; } } return true; } public bool IsFabaoUpgrade(FaBaoInfo faBaoInfo) { if (faBaoInfo == null) return false; if (faBaoInfo.FabaoPowerupConfig.ID >= ConfigComponent.Instance.GetAll().Length) { return false; } if (PlayerManager.Instance.myHero.powerUpConfig.ID < faBaoInfo.FabaoPowerupConfig.NeedLv) { return false; } for (var i = 0; i < faBaoInfo.FabaoPowerupConfig.PowerupItemIDs.Length; i++) { if (!PlayerManager.Instance.BagController.IsEnough( faBaoInfo.FabaoPowerupConfig.PowerupItemIDs[i], faBaoInfo.FabaoPowerupConfig.PowerupItemCosts[i])) { return false; } } ItemConfig itemConfig = ConfigComponent.Instance.Get(faBaoInfo.FabaoConfig.ItemID); ItemConfig itemConfig2 = ConfigComponent.Instance.Get(itemConfig.associateVlaue[0]); if (faBaoInfo.FabaoPowerupConfig.PromotePieceNum != null && faBaoInfo.FabaoPowerupConfig.PromotePieceNum[itemConfig2.quality - 1] != -1) { if (!PlayerManager.Instance.BagController.IsEnough(itemConfig.associateVlaue[0], faBaoInfo.FabaoPowerupConfig.PromotePieceNum[itemConfig2.quality - 1])) { return false; } } return true; } public bool IsFabaoUpgrade1(int index, FaBaoInfo faBaoInfo) { int redDotID = 9; bool isEnable = true; // object[] objects = value as object[]; if (index > PlayerManager.Instance.myHero.powerUpConfig.MaxFabaoNum - 1) { HeroPowerUpConfig[] heroPowerUpConfigs = ConfigComponent.Instance.GetAll(); foreach (var heroPowerUpConfig in heroPowerUpConfigs) { if (heroPowerUpConfig.MaxFabaoNum > PlayerManager.Instance.myHero.powerUpConfig.MaxFabaoNum) { isEnable = false; } } } if (isEnable) { AccountFileInfo.RedDot redDot = RedDotManager.Instance.GetRedDot(redDotID); if (redDot == null) { return true; } else { if (redDot.Params.Contains(index.ToString())) { return IsFabaoUpgrade(faBaoInfo); } else { return true; } } } return false; } public override void Dispose() { AllRedDotGroupData.Clear(); base.Dispose(); } }