using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; /// /// 武将培养界面 /// public class HeroTrainWin : UIBase { [SerializeField] Button showFuncBtn; //只显示立绘时点击,显示功能 [SerializeField] Transform funcForm; [SerializeField] UIHeroController roleLhModel; //展示英雄立绘 [SerializeField] Button rightBtn; [SerializeField] Button leftBtn; [SerializeField] UIHeroController roleXsModel; //像素 [SerializeField] UIEffectPlayer lvupEffect; [SerializeField] Image jobImg; [SerializeField] Text jobPosNameText; [SerializeField] Text descText; [SerializeField] Text fightPowerText; //由客户端自己预算的战力 [SerializeField] Button lockBtn; [SerializeField] Image lockImg; [SerializeField] Image unLockImg; [SerializeField] HeroConnectionCell connetionForm; //羁绊 [SerializeField] Button resetBtn; [SerializeField] Button deleteBtn; [SerializeField] Button seeLhBtn; //查看立绘 [SerializeField] SkillBaseCell normalSkillCell; [SerializeField] SkillBaseCell angerSkillCell; [SerializeField] Button awakeBtn; [SerializeField] Button closeBtn; //关闭按钮 [SerializeField] List starImgList; [SerializeField] Text nameText; [SerializeField] UIEffectPlayer nameEffect; [SerializeField] Image countryImg; [SerializeField] Text awakeLVText; //属性区 [SerializeField] Button attrBtn; [SerializeField] Image unfoldImg; //展开时按钮的图标 [SerializeField] Image foldImg; //收起时按钮的图标 bool unfoldState = false;//是否展开 [SerializeField] Transform foldPos; [SerializeField] Transform unfoldPos; //展开时的位置 [SerializeField] RectTransform attrPanel; //显示的属性栏 [SerializeField] RectTransform attrScroll; [SerializeField] RichText inheritText; //武将继承描述 [SerializeField] Text[] inheritAttrText; //武将会继承的属性 [SerializeField] RichText heroAddPerText; //主公(上阵)加成描述 [SerializeField] Text[] heroAddAttrPerText; //主公(上阵)加成 [SerializeField] Text[] addPerText; //增加百分比(飘动) [SerializeField] PositionTween addPerObject; [SerializeField] Image lvupMoneyIcon; [SerializeField] Text lvupMoneyText; [SerializeField] Text lvupBtnText; [SerializeField] LongPressButton lvupBtn; [SerializeField] Button allAttrBtn; [SerializeField] Text allPotentialText; //潜能 [SerializeField] Text[] fetterText; //羁绊 [SerializeField] Text[] fetterNameText; //羁绊 string guid; HeroInfo hero; protected override void InitComponent() { showFuncBtn.AddListener(() => { funcForm.SetActive(true); }); seeLhBtn.AddListener(() => { funcForm.SetActive(false); }); closeBtn.AddListener(CloseWindow); rightBtn.AddListener(() => { ChangeHero(1); }); leftBtn.AddListener(() => { ChangeHero(-1); }); lockBtn.AddListener(() => { hero.ChangeLockState(); }); resetBtn.AddListener(ResetBtnClick); deleteBtn.AddListener(DeleteHero); awakeBtn.AddListener(() => { // UIManager.Instance.OpenWindow(hero.heroId); }); inheritText.OnClick = () => { SmallTipWin.showText = Language.Get("herocard47"); SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition); UIManager.Instance.OpenWindow(); }; heroAddPerText.OnClick = () => { SmallTipWin.showText = Language.Get("herocard48"); SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition); UIManager.Instance.OpenWindow(); }; attrBtn.AddListener(() => { unfoldState = !unfoldState; RefreshFoldState(); }); allAttrBtn.AddListener(() => { UIManager.Instance.OpenWindow(hero.itemHero.gridIndex); }); lvupBtn.AddListener(LVUp); lvupBtn.onPress.AddListener(LVUp); } protected override void OnPreOpen() { PackManager.Instance.RefreshItemLockEvent += RefreshItemLockEvent; HeroManager.Instance.onHeroChangeEvent += RefreshHeroEvent; UIManager.Instance.OnCloseWindow += OnCloseWindow; guid = HeroUIManager.Instance.selectHeroGuid; hero = HeroManager.Instance.GetHero(guid); unfoldState = false; addPerObject.SetActive(false); Refresh(); } protected override void OnPreClose() { PackManager.Instance.RefreshItemLockEvent -= RefreshItemLockEvent; HeroManager.Instance.onHeroChangeEvent -= RefreshHeroEvent; UIManager.Instance.OnCloseWindow -= OnCloseWindow; } private void OnCloseWindow(UIBase closeUI) { //其他界面删除武将会影响逻辑 if (closeUI is HeroDeleteWin) { HeroUIManager.Instance.SortHeroList(); if (HeroManager.Instance.GetHero(guid) == null) { CloseWindow(); } } } public override void Refresh() { roleLhModel.Create(hero.SkinID, HeroUIManager.lihuiScale, motionName: "", isLh: true); roleXsModel.Create(hero.SkinID); jobImg.SetSprite(HeroUIManager.Instance.GetJobIconName(hero.heroConfig.Class)); jobPosNameText.text = HeroUIManager.Instance.GetJobName(hero.heroConfig.Class); descText.text = hero.heroConfig.Desc; fightPowerText.text = UIHelper.ReplaceLargeArtNum(hero.CalculatePower()); 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, () => { UIManager.Instance.OpenWindow(hero.heroId); }, true); angerSkillCell.Init(hero.heroConfig.AngerSkillID, () => { UIManager.Instance.OpenWindow(hero.heroId); }, true); awakeBtn.SetActive(HeroAwakeConfig.CanAwake(hero.heroId, 1)); RefreshName(); RefreshFoldState(); RefreshAttr(); RefreshAllPotential(); RefreshFetter(); } void RefreshItemLockEvent(PackType type, string guid, bool lockState) { if (type != PackType.Hero) return; lockImg.SetActive(hero.isLock); unLockImg.SetActive(!hero.isLock); } void RefreshHeroEvent(HeroInfo hero) { Refresh(); } void RefreshConn() { if (hero.heroConfig.FetterIDList.Length > 0) { connetionForm.SetActive(true); connetionForm.Display(hero.heroConfig.FetterIDList[0], Language.Get("herocard40"), true, guid); } else { connetionForm.SetActive(false); } } void ChangeHero(int changeValue) { var index = HeroUIManager.Instance.heroSortList.IndexOf(guid); if (index == -1) return; int resultIndex = index + changeValue; //循环处理 if (resultIndex < 0) { resultIndex = HeroUIManager.Instance.heroSortList.Count - 1; } else if (resultIndex > HeroUIManager.Instance.heroSortList.Count - 1) { resultIndex = 0; } guid = HeroUIManager.Instance.heroSortList[resultIndex]; hero = HeroManager.Instance.GetHero(guid); Refresh(); } void ResetBtnClick() { //升级、突破、觉醒 if (hero.heroLevel == 1 && hero.breakLevel == 0 && hero.awakeLevel == 0) { SysNotifyMgr.Instance.ShowTip("HeroCanNotReset"); return; } List items = new List(); 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.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(hero.itemHero.guid, hero.CalculatePower(false)); } void DeleteHero() { // if (hero.isLock) // { // SysNotifyMgr.Instance.ShowTip("UnlockHero"); // return; // } UIManager.Instance.OpenWindow(); } void RefreshStars() { for (int i = 0; i < starImgList.Count; i++) { if (hero.heroStar == 0 && i == 0) { // 无星级 特殊处理 starImgList[i].SetActive(true); starImgList[i].SetSprite("herostar" + hero.heroStar); } else if ((hero.heroStar - 1) % starImgList.Count >= i) { starImgList[i].SetActive(true); starImgList[i].SetSprite("herostar" + (((hero.heroStar - 1) / starImgList.Count) + 1) * starImgList.Count); } else { starImgList[i].SetActive(false); } } } void RefreshName() { 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) { nameEffect.SetActive(true); nameEffect.Play(hero.Quality == 4 ? 0 : 1); } else { nameEffect.SetActive(false); } countryImg.SetSprite(HeroUIManager.Instance.GetCountryIconName(hero.heroConfig.Country)); if (hero.awakeLevel == 0) { awakeLVText.text = Language.Get("L1094") + hero.heroLevel; awakeLVText.GetComponent().colorType = QualityTextColType.itemcucao; } else { awakeLVText.text = Language.Get("L1094") + hero.heroLevel + " " + Language.Get("herocard12", hero.awakeLevel); awakeLVText.GetComponent().colorType = QualityTextColType.red; } } void RefreshFoldState() { if (!unfoldState) { foldImg.SetActive(true); unfoldImg.SetActive(false); attrPanel.localPosition = foldPos.localPosition; attrScroll.sizeDelta = new Vector2(attrScroll.rect.width, 445); } else { foldImg.SetActive(false); unfoldImg.SetActive(true); attrPanel.localPosition = unfoldPos.localPosition; attrScroll.sizeDelta = new Vector2(attrScroll.rect.width, 933); } } void RefreshAttr() { inheritAttrText[0].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.inheritAttrs[0], hero.heroConfig.AtkInheritPer)); inheritAttrText[1].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.inheritAttrs[1], hero.heroConfig.DefInheritPer)); inheritAttrText[2].text = PlayerPropertyConfig.GetFullDescription(new Int2(PlayerPropertyConfig.inheritAttrs[2], hero.heroConfig.HPInheritPer)); //上阵属性 int valuePer = hero.GetOnBattleAddPer(); 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"); lvupBtn.interactable = true; lvupBtn.SetColorful(null, true); lvupMoneyIcon.SetActive(true); if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero)) { 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); } 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); } } else { lvupBtnText.text = Language.Get("L1110"); lvupBtn.interactable = false; lvupBtn.SetColorful(null, false); lvupMoneyIcon.SetActive(false); } } void LVUp() { int itemID = 0; long needCount = 0; if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero)) { //突破 if (!UIManager.Instance.IsOpened()) { HeroUIManager.Instance.selectHeroGuid = guid; UIManager.Instance.OpenWindow(); } } else { //升级 var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel); itemID = lvupConfig.UPCostItem[0]; needCount = lvupConfig.UPCostItem[1]; if (ItemLogicUtility.CheckItemCount(PackType.Item, itemID, needCount, 2)) { var pack = new CB230_tagCSHeroLVUP(); pack.ItemIndex = (ushort)hero.itemHero.gridIndex; 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.BreakLVAddPer); } addPerObject.Play(() => { addPerObject.SetActive(false); }); HeroUIManager.Instance.lastFightPower = new KeyValuePair(hero.itemHero.guid, hero.CalculatePower(false)); } } } void RefreshAllPotential() { if (!HeroBreakConfig.configDics.ContainsKey(hero.heroId)) return; var list = HeroBreakConfig.configDics[hero.heroId].Keys.ToList(); list.Sort(); string allAttrStr = string.Empty; for (int i = 0; i < list.Count; i++) { var nextQualityBreakConfig = HeroBreakConfig.GetHeroBreakConfig(hero.heroId, i + 1); if (nextQualityBreakConfig == null) break; List attrStrArr = new List(); for (int j = 0; j < nextQualityBreakConfig.AttrIDList.Length; j++) { 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)); } if (nextQualityBreakConfig.SkillID != 0) { var skill = SkillConfig.Get(nextQualityBreakConfig.SkillID); if (skill != null) { attrStrArr.Add(skill.Description); } else { Debug.LogError("未配置技能" + nextQualityBreakConfig.SkillID); } } if (i < hero.breakLevel) { allAttrStr += Language.Get("herocard63", i + 1, string.Join(Language.Get("L1112"), attrStrArr)) + "\n"; } else { //置灰 allAttrStr += UIHelper.AppendColor(TextColType.Gray, Language.Get("herocard63", i + 1, string.Join(Language.Get("L1112"), attrStrArr))) + "\n"; } } allPotentialText.text = allAttrStr.Trim(); } //羁绊 void RefreshFetter() { for (int i = 0; i < fetterText.Length; i++) { if (i < hero.heroConfig.FetterIDList.Length) { fetterText[i].SetActive(true); var fetterID = hero.heroConfig.FetterIDList[i]; HeroFetterConfig fetterConfig = HeroFetterConfig.Get(fetterID); List heroNames = new List(); bool isAllCollect = true; //是否全收集 foreach (var tmpHeroID in fetterConfig.HeroIDList) { heroNames.Add(HeroConfig.Get(tmpHeroID).Name); if (HeroManager.Instance.GetHeroCountByID(tmpHeroID) == 0) { isAllCollect = false; } } var attrStr = string.Join(Language.Get("SplitString1"), heroNames) + Language.Get("herocard38"); for (int j = 0; j < fetterConfig.AttrIDList.Length; j++) { string format = !isAllCollect ? "{0}+{1}" : "{0}+" + UIHelper.AppendColor(TextColType.Green, "{1}"); attrStr += Language.Get("L1112") + PlayerPropertyConfig.GetFullDescription(fetterConfig.AttrIDList[j], fetterConfig.AttrValueList[j], format); } fetterText[i].text = attrStr; fetterText[i].color = UIHelper.GetUIColor(isAllCollect ? TextColType.NavyBrown : TextColType.Gray); fetterNameText[i].text = fetterConfig.FetterName; fetterNameText[i].color = UIHelper.GetUIColor(isAllCollect ? TextColType.NavyBrown : TextColType.Gray); } else { fetterText[i].SetActive(false); } } } }