| | |
| | | /// </summary> |
| | | public class HeroTrainWin : UIBase |
| | | { |
| | | [SerializeField] RawImage bgTexture; |
| | | [SerializeField] Button showFuncBtn; //只显示立绘时点击,显示功能 |
| | | [SerializeField] Transform funcForm; |
| | | [SerializeField] UIHeroController roleLhModel; //展示英雄立绘 |
| | |
| | | [SerializeField] Text[] inheritAttrText; //武将会继承的属性 |
| | | [SerializeField] RichText heroAddPerText; //主公(上阵)加成描述 |
| | | [SerializeField] Text[] heroAddAttrPerText; //主公(上阵)加成 |
| | | [SerializeField] Text[] addPerText; //增加百分比(飘动) |
| | | [SerializeField] PositionTween addPerObject; |
| | | [SerializeField] Transform addPerParent; |
| | | [SerializeField] HeroTrainAddAttrCell addPerObject; |
| | | [SerializeField] Image lvupMoneyIcon; |
| | | [SerializeField] Text lvupMoneyText; |
| | | [SerializeField] Text lvupBtnText; |
| | |
| | | [SerializeField] Text starUPBtnText; |
| | | [SerializeField] Button washBtn; |
| | | |
| | | //冻结处理 |
| | | [SerializeField] Button freezeTipBtn; |
| | | [SerializeField] GameObject freezeTipGo; |
| | | [SerializeField] Text freezeStarText; |
| | | [SerializeField] Text freezeAawkeLVText; |
| | | [SerializeField] List<Image> starImgFreezeList; |
| | | |
| | | //伪红点用图片代替 |
| | | [SerializeField] Image redpointAwake; |
| | | [SerializeField] Image redpointGift; |
| | | [SerializeField] Image redpointLVUP; |
| | | |
| | | |
| | | Queue<HeroTrainAddAttrCell> lvupAttrQueue = new Queue<HeroTrainAddAttrCell>(); |
| | | |
| | | string guid; |
| | | HeroInfo hero; |
| | |
| | | }); |
| | | |
| | | lockBtn.AddListener(() => { hero.ChangeLockState(); }); |
| | | resetBtn.AddListener(ResetBtnClick); |
| | | resetBtn.AddListener(() => |
| | | { |
| | | HeroUIManager.Instance.ResetBtnClick(hero); |
| | | }); |
| | | deleteBtn.AddListener(DeleteHero); |
| | | awakeBtn.AddListener(() => |
| | | { |
| | |
| | | |
| | | potentialCellList = new List<GameObject>(); |
| | | awakeCellList = new List<GameObject>(); |
| | | |
| | | freezeTipBtn.AddListener(() => |
| | | { |
| | | freezeTipGo.SetActive(!freezeTipGo.activeSelf); |
| | | }); |
| | | } |
| | | |
| | | |
| | |
| | | PackManager.Instance.RefreshItemLockEvent += RefreshItemLockEvent; |
| | | HeroManager.Instance.onHeroChangeEvent += RefreshHeroEvent; |
| | | UIManager.Instance.OnCloseWindow += OnCloseWindow; |
| | | HeroUIManager.Instance.OnTeamPosChangeEvent += TeamPosChangeEvent; |
| | | TeamManager.Instance.OnTeamChange += TeamPosChangeEvent; |
| | | guid = HeroUIManager.Instance.selectHeroGuid; |
| | | hero = HeroManager.Instance.GetHero(guid); |
| | | unfoldState = false; |
| | |
| | | PackManager.Instance.RefreshItemLockEvent -= RefreshItemLockEvent; |
| | | HeroManager.Instance.onHeroChangeEvent -= RefreshHeroEvent; |
| | | UIManager.Instance.OnCloseWindow -= OnCloseWindow; |
| | | HeroUIManager.Instance.OnTeamPosChangeEvent -= TeamPosChangeEvent; |
| | | TeamManager.Instance.OnTeamChange -= TeamPosChangeEvent; |
| | | } |
| | | |
| | | private void OnCloseWindow(UIBase closeUI) |
| | |
| | | |
| | | public void Display() |
| | | { |
| | | bgTexture.SetTexture2D("countryBG" + hero.heroConfig.Country); |
| | | roleLhModel.Create(hero.SkinID, 1, motionName: "", isLh: true); |
| | | roleXsModel.Create(hero.SkinID); |
| | | roleXsModel.Create(hero.SkinID, 1); |
| | | jobImg.SetSprite(HeroUIManager.Instance.GetJobIconName(hero.heroConfig.Class)); |
| | | jobPosNameText.text = HeroUIManager.Instance.GetJobName(hero.heroConfig.Class); |
| | | descText.text = hero.heroConfig.Desc; |
| | |
| | | PlayerMainDate.Instance.AddPowerNotOnTeam(hero); |
| | | lockImg.SetActive(hero.isLock); |
| | | unLockImg.SetActive(!hero.isLock); |
| | | nameText.text = hero.breakLevel == 0 ? hero.heroConfig.Name : Language.Get("herocardbreaklv", hero.heroConfig.Name, hero.breakLevel); |
| | | |
| | | RefreshConn(); |
| | | normalSkillCell.Init(hero.heroConfig.AtkSkillID, () => |
| | |
| | | RefreshFetter(); |
| | | RefreshGift(); |
| | | RefreshAwake(); |
| | | RefreshFreeze(); |
| | | RefreshRedImg(); |
| | | |
| | | HeroUIManager.Instance.RemoveNewHero(hero.heroId); |
| | | } |
| | | |
| | | void RefreshItemLockEvent(PackType type, string guid, bool lockState) |
| | |
| | | Display(); |
| | | } |
| | | |
| | | void ResetBtnClick() |
| | | { |
| | | //升级、突破、觉醒 |
| | | if (hero.heroLevel == 1 && hero.breakLevel == 0 && hero.awakeLevel == 0) |
| | | { |
| | | SysNotifyMgr.Instance.ShowTip("HeroCanNotReset"); |
| | | return; |
| | | } |
| | | |
| | | List<Item> items = new List<Item>(); |
| | | |
| | | |
| | | var payBack1 = CommonFunc.AddDict(HeroUIManager.Instance.GetHeroLVPayBack(hero.Quality, hero.heroLevel), |
| | | HeroUIManager.Instance.GetHeroBreakPayBack(hero.Quality, hero.breakLevel)); |
| | | |
| | | //已觉醒的需要消耗货币 |
| | | if (hero.awakeLevel == 0) |
| | | { |
| | | items = CommonFunc.ChangeToItemList(payBack1); |
| | | ConfirmCancel.ShowItemsConfirm(items, Language.Get("herocard42"), Language.Get("herocard43"), (bool isOk) => |
| | | { |
| | | if (isOk) |
| | | { |
| | | //发包 |
| | | SendReborn(hero.itemHero.gridIndex); |
| | | } |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | |
| | | if (HeroUIManager.Instance.awakeRebirthCnt >= HeroUIManager.Instance.rebornAwakeHeroMaxCount) |
| | | { |
| | | SysNotifyMgr.Instance.ShowTip("HeroRebornAwakeMax"); |
| | | return; |
| | | } |
| | | |
| | | payBack1 = CommonFunc.AddDict(payBack1, HeroUIManager.Instance.GetHeroQualityAwakePayBack(hero.Quality, hero.awakeLevel)); |
| | | items = CommonFunc.ChangeToItemList(payBack1); |
| | | var info2 = Language.Get("herocard44", HeroUIManager.Instance.rebornAwakeHeroMaxCount - HeroUIManager.Instance.awakeRebirthCnt); |
| | | var payBackMoney = HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel).RebirthCostMoney; |
| | | ConfirmCancel.ShowItemsConfirm(items, Language.Get("herocard42"), Language.Get("herocard43"), (bool isOk) => |
| | | { |
| | | if (isOk) |
| | | { |
| | | if (UIHelper.GetMoneyCnt(HeroUIManager.Instance.payBackMoneyType) < payBackMoney) |
| | | { |
| | | ItemTipUtility.ShowMoneyTip(HeroUIManager.Instance.payBackMoneyType); |
| | | return; |
| | | } |
| | | //发包 |
| | | SendReborn(hero.itemHero.gridIndex); |
| | | } |
| | | }, info2, "", payBackMoney, HeroUIManager.Instance.payBackMoneyType); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | void SendReborn(int index) |
| | | { |
| | | var pack = new CB239_tagCSHeroRebirth(); |
| | | pack.ItemIndex = (ushort)index; |
| | | GameNetSystem.Instance.SendInfo(pack); |
| | | |
| | | HeroUIManager.Instance.lastFightPower = new KeyValuePair<string, long>(hero.itemHero.guid, hero.CalculatePower(false)); |
| | | |
| | | } |
| | | |
| | | void DeleteHero() |
| | | { |
| | |
| | | { |
| | | RefreshStars(); |
| | | nameText.text = hero.breakLevel == 0 ? hero.heroConfig.Name : Language.Get("herocardbreaklv", hero.heroConfig.Name, hero.breakLevel); |
| | | |
| | | nameText.color = UIHelper.GetUIColorByFunc(hero.Quality); |
| | | |
| | | if (hero.Quality >= 4) |
| | |
| | | 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], TextColType.NavyBrown); |
| | | lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, breakConfig.UPCostItem[0], breakConfig.UPCostItem[1]); |
| | | } |
| | | else |
| | | { |
| | | 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], TextColType.NavyBrown); |
| | | lvupMoneyText.text = UIHelper.ShowUseItem(PackType.Item, lvupConfig.UPCostItem[0], lvupConfig.UPCostItem[1]); |
| | | } |
| | | lvupBtn.SetInteractable(true); |
| | | |
| | |
| | | GameNetSystem.Instance.SendInfo(pack); |
| | | //预显示 |
| | | lvupEffect.Play(); |
| | | addPerObject.SetActive(true); |
| | | for (int i = 0; i < addPerText.Length; i++) |
| | | { |
| | | addPerText[i].text = "+" + PlayerPropertyConfig.GetValueDescription(PlayerPropertyConfig.basePerAttrs[i], hero.qualityConfig.LVAddPer); |
| | | } |
| | | addPerObject.Play(() => |
| | | { |
| | | addPerObject.SetActive(false); |
| | | var cell = RequestCell(); |
| | | cell.transform.localPosition = new Vector3(0, 0, 0); |
| | | cell.Display(hero.qualityConfig.LVAddPer, ()=> |
| | | { |
| | | cell.SetActive(false); |
| | | ReturnCell(cell); |
| | | }); |
| | | |
| | | HeroUIManager.Instance.lastFightPower = new KeyValuePair<string, long>(hero.itemHero.guid, hero.CalculatePower(false)); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | HeroTrainAddAttrCell RequestCell() |
| | | { |
| | | |
| | | if (lvupAttrQueue.Count == 0) |
| | | { |
| | | return Instantiate(addPerObject, addPerParent); |
| | | } |
| | | return lvupAttrQueue.Dequeue(); |
| | | } |
| | | |
| | | |
| | | void ReturnCell(HeroTrainAddAttrCell cell) |
| | | { |
| | | lvupAttrQueue.Enqueue(cell); |
| | | } |
| | | |
| | | |
| | | void RefreshAllPotential() |
| | | { |
| | |
| | | if (nextQualityBreakConfig.AttrIDList[j] == 0) |
| | | continue; |
| | | string format = i < hero.breakLevel ? "{0}" + UIHelper.AppendColor(TextColType.Green, "+{1}") : "{0}+{1}"; |
| | | attrStrArr.Add(PlayerPropertyConfig.GetFullDescription(nextQualityBreakConfig.AttrIDList[j], nextQualityBreakConfig.AttrValueList[j], format)); |
| | | attrStrArr.Add((string.IsNullOrEmpty(nextQualityBreakConfig.SkillIName) ? string.Empty : Language.Get("equipQualityFormat", nextQualityBreakConfig.SkillIName)) + |
| | | PlayerPropertyConfig.GetFullDescription(nextQualityBreakConfig.AttrIDList[j], nextQualityBreakConfig.AttrValueList[j], format)); |
| | | } |
| | | |
| | | if (nextQualityBreakConfig.SkillID != 0) |
| | |
| | | { |
| | | for (int k = 0; k < config.AttrIDList.Length; k++) |
| | | { |
| | | awakeStr += PlayerPropertyConfig.GetFullDescription(config.AttrIDList[k], config.AttrValueList[k], "{0}+" + UIHelper.AppendColor(TextColType.Green, "{1}")) |
| | | awakeStr += (string.IsNullOrEmpty(config.SkillIName) ? string.Empty : Language.Get("equipQualityFormat", config.SkillIName)) + |
| | | PlayerPropertyConfig.GetFullDescription(config.AttrIDList[k], config.AttrValueList[k], "{0}+" + UIHelper.AppendColor(TextColType.Green, "{1}")) |
| | | + (k == config.AttrIDList.Length - 1 ? "" : "\n"); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | void TeamPosChangeEvent(List<int> posList, int flyFrom, Vector3 startPos) |
| | | { |
| | | void TeamPosChangeEvent(TeamType teamType) |
| | | { |
| | | if (teamType != TeamType.Story) |
| | | return; |
| | | fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculatePower()); |
| | | } |
| | | |
| | | void RefreshFreeze() |
| | | { |
| | | //至少需要觉醒到多少级 |
| | | int needAwakeLV = HeroUIManager.Instance.GetAwakeLVByStarLV(hero.heroId, hero.heroStarMaxBefore); |
| | | if (hero.awakeLevel < needAwakeLV) |
| | | { |
| | | freezeTipBtn.SetActive(true); |
| | | //星级 |
| | | for (int i = 0; i < starImgFreezeList.Count; i++) |
| | | { |
| | | if ((hero.heroStarMaxBefore - 1) % starImgFreezeList.Count >= i) |
| | | { |
| | | starImgFreezeList[i].SetActive(true); |
| | | starImgFreezeList[i].SetSprite("herostar" + (((hero.heroStarMaxBefore - 1) / starImgFreezeList.Count) + 1) * starImgFreezeList.Count); |
| | | } |
| | | else |
| | | { |
| | | starImgFreezeList[i].SetActive(false); |
| | | } |
| | | } |
| | | freezeStarText.text = Language.Get("HeroAwake16", hero.heroStarMaxBefore); |
| | | freezeAawkeLVText.text = Language.Get("HeroAwake17", needAwakeLV); |
| | | |
| | | } |
| | | else |
| | | { |
| | | freezeTipBtn.SetActive(false); |
| | | } |
| | | |
| | | freezeTipGo.SetActive(false); |
| | | } |
| | | |
| | | void RefreshRedImg() |
| | | { |
| | | redpointAwake.SetActive(false); |
| | | redpointGift.SetActive(false); |
| | | redpointLVUP.SetActive(false); |
| | | if (!hero.IsInTeamByTeamType(TeamType.Story)) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | |
| | | var heroCnt = PackManager.Instance.GetItemCountByID(PackType.Hero, hero.heroId); |
| | | var itemPack = PackManager.Instance.GetSinglePack(PackType.Item); |
| | | |
| | | //5星后才能觉醒 |
| | | if (hero.heroStar >= HeroUIManager.Instance.starLevelCanAwake) |
| | | { |
| | | //判断觉醒材料是否足够 |
| | | var maxAwakeLV = HeroAwakeConfig.GetMaxAwakeLV(hero.heroId); |
| | | if (hero.awakeLevel < maxAwakeLV) |
| | | { |
| | | var config = HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel); |
| | | if (itemPack.GetCountById(config.UPCostItem[0]) >= config.UPCostItem[1]) |
| | | { |
| | | redpointAwake.SetActive(true); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (heroCnt > 1) |
| | | { |
| | | redpointGift.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; |
| | | } |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | } |