| | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 武将培养界面 |
| | | /// 武将培养界面 |
| | | /// functionOrder 0 代表培养 1 代表突破 |
| | | /// 暂时不做一级界面区分,待时装界面分析处理,目前突破也在这个界面 |
| | | /// </summary> |
| | | public class HeroTrainWin : UIBase |
| | | { |
| | |
| | | [SerializeField] HeroConnectionCell connetionForm; //羁绊 |
| | | [SerializeField] Button resetBtn; |
| | | [SerializeField] Button deleteBtn; |
| | | [SerializeField] Transform deleteTip; |
| | | [SerializeField] Button seeLhBtn; //查看立绘 |
| | | [SerializeField] SkillBaseCell normalSkillCell; |
| | | [SerializeField] SkillBaseCell angerSkillCell; |
| | |
| | | [SerializeField] Text awakeLVText; |
| | | |
| | | //属性区 |
| | | [SerializeField] ScrollRect allAttrScroll; |
| | | [SerializeField] Button attrBtn; |
| | | [SerializeField] ScrollRect allAttrScroll; //培养属性 滚动区 |
| | | [SerializeField] Button attrBtn; //培养区的拖拉按钮 |
| | | [SerializeField] Image unfoldImg; //展开时按钮的图标 |
| | | [SerializeField] Image foldImg; //收起时按钮的图标 |
| | | bool unfoldState = false;//是否展开 |
| | |
| | | [SerializeField] Image redpointAwake; |
| | | [SerializeField] Image redpointGift; |
| | | [SerializeField] Image redpointLVUP; |
| | | [SerializeField] Image redpointBreakLVUP; //突破红点 |
| | | |
| | | |
| | | |
| | | #region 突破 |
| | | // 区分突破和培养模块 |
| | | [SerializeField] HeroLVBreakCell heroLVBreakCell; //对应培养的 allAttrScroll 和 attrBtn |
| | | |
| | | [SerializeField] GroupButtonEx trainMainButton; //培养入口按钮 |
| | | [SerializeField] GroupButtonEx breakMainButton; //突破入口按钮 |
| | | //入口伪红点用图片代替 |
| | | [SerializeField] Image trainMainRedImg; |
| | | [SerializeField] Image breakMainRedImg; |
| | | #endregion |
| | | |
| | | |
| | | Queue<HeroTrainAddAttrCell> lvupAttrQueue = new Queue<HeroTrainAddAttrCell>(); |
| | |
| | | |
| | | allAttrBtn.AddListener(() => |
| | | { |
| | | UIManager.Instance.OpenWindow<HeroAllAttrWin>(hero.itemHero.gridIndex); |
| | | if (hero == null) |
| | | return; |
| | | var dict = FightPowerManager.Instance.GetHeroTotalAttr(hero); |
| | | AttributeManager.Instance.OpenTotalAttributeWin(dict, hero.itemHero.gridIndex); |
| | | }); |
| | | lvupBtn.AddListener(LVUp); |
| | | lvupBtn.onPress.AddListener(LVUp); |
| | |
| | | { |
| | | freezeTipGo.SetActive(!freezeTipGo.activeSelf); |
| | | }); |
| | | |
| | | trainMainButton.AddListener(() => |
| | | { |
| | | functionOrder = 0; |
| | | DisplayTrainOrBreak(hero); |
| | | ForceRefreshLayout(); |
| | | }); |
| | | |
| | | breakMainButton.AddListener(() => |
| | | { |
| | | functionOrder = 1; |
| | | DisplayTrainOrBreak(hero); |
| | | unfoldState = false; |
| | | RefreshFoldState(); |
| | | }); |
| | | } |
| | | |
| | | |
| | |
| | | HeroManager.Instance.onHeroChangeEvent += RefreshHeroEvent; |
| | | UIManager.Instance.OnCloseWindow += OnCloseWindow; |
| | | TeamManager.Instance.OnTeamChange += TeamPosChangeEvent; |
| | | PackManager.Instance.RefreshItemEvent += RefreshItemEvent; |
| | | |
| | | guid = HeroUIManager.Instance.selectHeroGuid; |
| | | hero = HeroManager.Instance.GetHero(guid); |
| | | unfoldState = false; |
| | |
| | | HeroManager.Instance.onHeroChangeEvent -= RefreshHeroEvent; |
| | | UIManager.Instance.OnCloseWindow -= OnCloseWindow; |
| | | TeamManager.Instance.OnTeamChange -= TeamPosChangeEvent; |
| | | PackManager.Instance.RefreshItemEvent -= RefreshItemEvent; |
| | | } |
| | | |
| | | private void OnCloseWindow(UIBase closeUI) |
| | |
| | | jobPosNameText.text = HeroUIManager.Instance.GetJobName(hero.heroConfig.Class); |
| | | descText.text = hero.heroConfig.Desc; |
| | | fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculateFightPower()); |
| | | PlayerMainDate.Instance.AddPowerNotOnTeam(hero); |
| | | // PlayerMainDate.Instance.AddPowerNotOnTeam(hero); |
| | | lockImg.SetActive(hero.isLock); |
| | | unLockImg.SetActive(!hero.isLock); |
| | | |
| | |
| | | RefreshAwake(); |
| | | RefreshFreeze(); |
| | | RefreshRedImg(); |
| | | DisplayTrainOrBreak(hero); |
| | | ShowDeleteTip(); |
| | | |
| | | HeroUIManager.Instance.RemoveNewHero(hero.heroId); |
| | | ForceRefreshLayout(); |
| | | } |
| | | |
| | | |
| | | void ShowDeleteTip() |
| | | { |
| | | deleteTip.SetActive(false); |
| | | if (hero != null && hero.Quality == 1 && HeroUIManager.Instance.IsTheSameHeroFullStar(hero.heroId)) |
| | | { |
| | | |
| | | deleteTip.SetActive(true); |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 强制刷新Layout,解决嵌套Layout和ContentSizeFitter的重叠问题 |
| | |
| | | return; |
| | | lockImg.SetActive(hero.isLock); |
| | | unLockImg.SetActive(!hero.isLock); |
| | | } |
| | | |
| | | void RefreshItemEvent(PackType type, int index, int itemID) |
| | | { |
| | | if (type != PackType.Item) |
| | | return; |
| | | if (itemID != 7 && itemID != 8) |
| | | { |
| | | return; |
| | | } |
| | | RefreshAttr(); |
| | | } |
| | | |
| | | void RefreshHeroEvent(HeroInfo hero) |
| | |
| | | // SysNotifyMgr.Instance.ShowTip("UnlockHero"); |
| | | // return; |
| | | // } |
| | | |
| | | if (CanDelete()) |
| | | { |
| | | HeroUIManager.Instance.jumpDeleteHeroGuid = guid; |
| | | } |
| | | else |
| | | { |
| | | HeroUIManager.Instance.jumpDeleteHeroGuid = ""; |
| | | } |
| | | UIManager.Instance.OpenWindow<HeroDeleteWin>(); |
| | | } |
| | | |
| | | |
| | | bool CanDelete() |
| | | { |
| | | if (hero.isActive) |
| | | return false; |
| | | |
| | | return HeroUIManager.Instance.IsTheSameHeroFullStar(hero.heroId); |
| | | } |
| | | |
| | | void RefreshStars() |
| | |
| | | inheritAttrText[2].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.inheritAttrs[2], hero.heroConfig.HPInheritPer)); |
| | | |
| | | //上阵属性 |
| | | int valuePer = hero.GetOnBattleAddPer(); |
| | | int valuePer = hero.GetAddPer(); |
| | | for (int i = 0; i < heroAddAttrPerText.Length; i++) |
| | | { |
| | | heroAddAttrPerText[i].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.basePerAttrs[i], valuePer)); |
| | |
| | | if (!HeroUIManager.Instance.IsLVMax(hero)) |
| | | { |
| | | lvupBtnText.text = Language.Get("L1109"); |
| | | lvupMoneyIcon.SetActive(true); |
| | | lvupMoneyText.SetActive(true); |
| | | |
| | | if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero)) |
| | | // if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero)) |
| | | // { |
| | | // lvupBtnText.text = Language.Get("L1111"); |
| | | // var breakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(hero.Quality, hero.breakLevel); |
| | | // lvupMoneyIcon.SetOrgSprite(ItemConfig.Get(breakConfig.UPCostItemList[0][0]).IconKey); |
| | | // lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, breakConfig.UPCostItemList[0][0], breakConfig.UPCostItemList[0][1]); |
| | | // } |
| | | // else |
| | | { |
| | | lvupBtnText.text = Language.Get("L1111"); |
| | | var breakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(hero.Quality, hero.breakLevel); |
| | | lvupMoneyIcon.SetOrgSprite(ItemConfig.Get(breakConfig.UPCostItem[0]).IconKey); |
| | | lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, breakConfig.UPCostItem[0], breakConfig.UPCostItem[1]); |
| | | } |
| | | else |
| | | { |
| | | lvupBtnText.text = Language.Get("L1109"); |
| | | // lvupBtnText.text = Language.Get("L1109"); |
| | | var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel); |
| | | lvupMoneyIcon.SetOrgSprite(ItemConfig.Get(lvupConfig.UPCostItem[0]).IconKey); |
| | | lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, lvupConfig.UPCostItem[0], lvupConfig.UPCostItem[1]); |
| | |
| | | { |
| | | int itemID = 0; |
| | | long needCount = 0; |
| | | if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero)) |
| | | { |
| | | //突破 |
| | | if (!UIManager.Instance.IsOpened<HeroLVBreakWin>()) |
| | | { |
| | | HeroUIManager.Instance.selectHeroGuid = guid; |
| | | UIManager.Instance.OpenWindow<HeroLVBreakWin>(); |
| | | } |
| | | } |
| | | else |
| | | // if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero)) |
| | | // { |
| | | // //突破 |
| | | // if (!UIManager.Instance.IsOpened<HeroLVBreakWin>()) |
| | | // { |
| | | // HeroUIManager.Instance.selectHeroGuid = guid; |
| | | // UIManager.Instance.OpenWindow<HeroLVBreakWin>(); |
| | | // } |
| | | // } |
| | | // else |
| | | { |
| | | //升级 |
| | | var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel); |
| | |
| | | lvupEffect.Play(); |
| | | var cell = RequestCell(); |
| | | cell.transform.localPosition = new Vector3(0, 0, 0); |
| | | cell.Display(hero.qualityConfig.LVAddPer, ()=> |
| | | { |
| | | cell.Display(hero, () => |
| | | { |
| | | cell.SetActive(false); |
| | | ReturnCell(cell); |
| | | }); |
| | |
| | | |
| | | HeroTrainAddAttrCell RequestCell() |
| | | { |
| | | |
| | | |
| | | if (lvupAttrQueue.Count == 0) |
| | | { |
| | | return Instantiate(addPerObject, addPerParent); |
| | |
| | | if (i < hero.breakLevel) |
| | | { |
| | | nameText.text = Language.Get("herocard63", i + 1); |
| | | descText.text = string.Join(Language.Get("L1112"), attrStrArr); |
| | | descText.text = string.Join("\n", attrStrArr); |
| | | } |
| | | else |
| | | { |
| | | //置灰 |
| | | nameText.text = UIHelper.AppendColor(TextColType.NavyGray, Language.Get("herocard63", i + 1)); |
| | | descText.text = UIHelper.AppendColor(TextColType.NavyGray, UIHelper.RemoveColor(string.Join(Language.Get("L1112"), attrStrArr))); |
| | | descText.text = UIHelper.AppendColor(TextColType.NavyGray, UIHelper.RemoveColor(string.Join("\n", attrStrArr))); |
| | | } |
| | | } |
| | | |
| | |
| | | else if (type == 2) |
| | | { |
| | | var skill = SkillConfig.Get(config.SkillID); |
| | | awakeStr = Language.Get("L1039", skill.SkillName) + skill.Description; |
| | | if (skill != null) |
| | | { |
| | | awakeStr = Language.Get("L1039", skill.SkillName) + skill.Description; |
| | | } |
| | | else |
| | | { |
| | | Debug.LogError($"heroId:{hero.heroId} 觉醒技能ID:{config.SkillID} 配置错误技能不存在"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | void TeamPosChangeEvent(TeamType teamType) |
| | | void TeamPosChangeEvent(int teamType) |
| | | { |
| | | if (teamType != TeamType.Story) |
| | | if (teamType != TeamManager.Instance.GetMainTeamID()) |
| | | return; |
| | | fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculateFightPower()); |
| | | } |
| | |
| | | redpointAwake.SetActive(false); |
| | | redpointGift.SetActive(false); |
| | | redpointLVUP.SetActive(false); |
| | | if (!hero.IsInTeamByTeamType(TeamType.Story)) |
| | | { |
| | | return; |
| | | } |
| | | trainMainRedImg.SetActive(false); |
| | | breakMainRedImg.SetActive(false); |
| | | redpointBreakLVUP.SetActive(false); |
| | | |
| | | |
| | | var heroCnt = PackManager.Instance.GetItemCountByID(PackType.Hero, hero.heroId); |
| | | var itemPack = PackManager.Instance.GetSinglePack(PackType.Item); |
| | | |
| | | |
| | | if (heroCnt > 1 && hero.heroStar < hero.GetCurMaxStar()) |
| | | { |
| | | redpointGift.SetActive(true); |
| | | trainMainRedImg.SetActive(true); |
| | | } |
| | | |
| | | |
| | | |
| | | if (!HeroUIManager.Instance.IsLVMax(hero)) |
| | | { |
| | | var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel); |
| | | if (itemPack.GetCountById(lvupConfig.UPCostItem[0]) >= lvupConfig.UPCostItem[1]) |
| | | { |
| | | redpointLVUP.SetActive(true); |
| | | trainMainRedImg.SetActive(true); |
| | | } |
| | | } |
| | | |
| | | |
| | | if (!hero.IsInTeamByTeamType(BattlePreSetType.Story)) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | |
| | | //5星后才能觉醒 |
| | | if (hero.heroStar >= HeroUIManager.Instance.starLevelCanAwake) |
| | | if (hero.heroStar >= HeroUIManager.Instance.starLevelCanAwake && FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.HeroAwake)) |
| | | { |
| | | //判断觉醒材料是否足够 |
| | | var maxAwakeLV = HeroAwakeConfig.GetMaxAwakeLV(hero.heroId); |
| | |
| | | if (itemPack.GetCountById(config.UPCostItem[0]) >= config.UPCostItem[1]) |
| | | { |
| | | redpointAwake.SetActive(true); |
| | | trainMainRedImg.SetActive(true); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (heroCnt > 1) |
| | | if (HeroUIManager.Instance.IsCanBreak(hero)) |
| | | { |
| | | redpointGift.SetActive(true); |
| | | redpointBreakLVUP.SetActive(true); |
| | | breakMainRedImg.SetActive(true); |
| | | } |
| | | |
| | | var maxBreakLV = HeroBreakConfig.GetMaxBreakLv(hero.heroId); |
| | | if (hero.breakLevel < maxBreakLV) |
| | | { |
| | | if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero)) |
| | | { |
| | | var breakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(hero.Quality, hero.breakLevel); |
| | | if (itemPack.GetCountById(breakConfig.UPCostItem[0]) >= breakConfig.UPCostItem[1]) |
| | | { |
| | | redpointLVUP.SetActive(true); |
| | | return; |
| | | } |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | |
| | | #region 突破功能 |
| | | |
| | | if (!HeroUIManager.Instance.IsLVMax(hero)) |
| | | void DisplayTrainOrBreak(HeroInfo hero) |
| | | { |
| | | //heroLVBreakCell; //对应培养的 allAttrScroll 和 attrBtn |
| | | if (functionOrder == 0) |
| | | { |
| | | var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel); |
| | | if (itemPack.GetCountById(lvupConfig.UPCostItem[0]) >= lvupConfig.UPCostItem[1]) |
| | | { |
| | | redpointLVUP.SetActive(true); |
| | | } |
| | | heroLVBreakCell.SetActive(false); |
| | | allAttrScroll.SetActive(true); |
| | | attrBtn.SetActive(true); |
| | | trainMainButton.SelectBtn(); |
| | | } |
| | | else |
| | | { |
| | | heroLVBreakCell.SetActive(true); |
| | | allAttrScroll.SetActive(false); |
| | | attrBtn.SetActive(false); |
| | | |
| | | heroLVBreakCell.Display(hero); |
| | | breakMainButton.SelectBtn(); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | } |