using cfg.CharacterCfg; using Framework; using Gameplay.Common; using Gameplay.Net; using NLDPB; using System; using System.Numerics; using Gameplay; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using Button = UnityEngine.UI.Button; using Image = UnityEngine.UI.Image; using Vector3 = UnityEngine.Vector3; public class UILevelUpController : UIWindow { //UI GameObj ///Auto Gen Start/// public Image Image_BG; public Button Button_Back; public TMP_Text Text_Back; public Button Button_Home; public Image Image_PointBG; public TMP_Text Text_ExpPoint; public TMP_Text Text_UniversalExp; public TMP_Text Text_Exp_Value; public Image Image_LevelUPBar; public Image Image_Poster; public TMP_Text Text_Level_Now; public TMP_Text Text_Level_Max; public Image Image_Hp; public TMP_Text Text_Hp; public TMP_Text Text_Hp_Value; public TMP_Text Text_Change_Hp; public Image Image_Morale; public TMP_Text Text_Cultivate_Morale; public TMP_Text Text_Morale_Value; public TMP_Text Text_Change_Morale; public Image Image_Defense; public TMP_Text Text_Cultivate_Defense; public TMP_Text Text_Defense_Value; public TMP_Text Text_Change_Defanse; public Image Image_Armor; public TMP_Text Text_Cultivate_Armor; public TMP_Text Text_Armor_Value; public TMP_Text Text_Change_Armor; public Image Image_Attack; public TMP_Text Text_Cultivate_Attack; public TMP_Text Text_Attack_Value; public TMP_Text Text_Change_Attack; public Image Image_Speed; public TMP_Text Text_Cultivate_Speed; public TMP_Text Text_Speed_Value; public TMP_Text Text_Change_Speed; public TMP_Text Text_ExpBefore; public TMP_Text Text_EXP; public TMP_Text Text_Plus; public TMP_Text Text_ExpNeed; public TMP_Text Text_Level_Value; public TMP_Text Text_LV; public TMP_Text Text_LevelUpTo; public Button Button_MAX; public Button Button_Plus; public Button Button_Minus; public Image Image_LevelBar; public Image Image_LevelArrow; public TMP_Text Text_Level; public Button Button_Cannot; public TMP_Text Text_Cannot_Confirm; public Button Button_Confirm; public TMP_Text Text_Confirm; public Button Button_Cancel; private int expLast; CharacterDataInfo mCharacterDataInfo; private int mCurrentExp; CharacterLevelExp mCharacterLevelExpCfg; CharacterBreak mCharacterBreak; ///Auto Gen End/// /// Auto Gen End/// /// int targetLevel ; public DragForUI dragForUI; // Use this for initialization public override void OnAwake() { //bind UI GameObj UILevelUpBinder.GetComponents(this); BindButton(Button_Back, OnButton_BackClick); BindButton(Button_Plus, OnButton_PlusClick); BindButton(Button_Minus, OnButton_MinusClick); BindButton(Button_MAX, OnButton_MAXClick); BindButton(Button_Cancel, OnButton_CancelClick); BindButton(Button_Confirm, OnButton_ConfirmClick); BindButton(Button_Home, OnClickHome); dragForUI = CommonUtils.GetComponent(this.gameObject,"Drag"); dragForUI.OnDragStarted += ondragStart; dragForUI.OnDraging += ondrag; dragForUI.OnDragCompleted += ondragend; } UnityEngine.Vector2 startPos; private void ondragend(PointerEventData eventData) { } private void ondrag(PointerEventData eventData) { float offset = eventData.position.y - startPos.y; if (offset < 0) { if (targetLevel <= mCharacterDataInfo.Level) { return; } targetLevel--; RefreshAfterChangeValue(); RefreshLevelUpBtn(); }else { if (mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel) == null) { DebugUtil.LogError("没有配置Id {0} 突破等级 {1}", mCharacterDataInfo.ID, mCharacterDataInfo.BreakLevel); return; } if (targetLevel >= mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit) { return; } targetLevel++; RefreshAfterChangeValue(); RefreshLevelUpBtn(); } } private void ondragStart(PointerEventData eventData) { startPos = eventData.position; } private void OnClickHome() { UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_MainPanel); } private void RegisterEvent() { EventManager.Instance.Register(EventManager.EventName.EN_CharacterLevelUp,(Action)OnCharacterLevelup); } private void OnCharacterLevelup(UpgradeType type) { if(type!=UpgradeType.UtLevel) { return; } mCharacterDataInfo = CharacterDataInfoManager.Instance.GetCharacterInfo(mCharacterDataInfo.ID); targetLevel = (int)mCharacterDataInfo.Level; RefreshUI(); RefreshAfterChangeValue(); } private void UnregisterEvent() { EventManager.Instance.Unregister(EventManager.EventName.EN_CharacterLevelUp,(Action)OnCharacterLevelup); } private void RefreshLevelUpBtn() { Button_Cannot.gameObject.SetActive(targetLevel == mCharacterDataInfo.Level); Button_Confirm.gameObject.SetActive(targetLevel != mCharacterDataInfo.Level); Button_Cancel.gameObject.SetActive(targetLevel != mCharacterDataInfo.Level); } private void OnButton_ConfirmClick() { if(targetLevel==mCharacterDataInfo.Level) { return; } if (targetLevel >= expLast) { CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_expDontFull")); return; } if (Actor.Instance.Item.GetItemCount(GLConfig.Inst.data.HeroExpItem)< expLast) { CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_expDontFull")); return; } NetHelper.CharacterUpgrade(mCharacterDataInfo.ID,NLDPB.UpgradeType.UtLevel,(uint)targetLevel); } private void OnButton_CancelClick() { if(targetLevel==mCharacterDataInfo.Level) { return; } targetLevel = (int)mCharacterDataInfo.Level; RefreshAfterChangeValue(); } private void OnButton_MAXClick() { if (targetLevel > mCharacterDataInfo.Cfg.Hp.Count) { DebugUtil.LogError("levelexp表和各种属性没有该突破等级的等级限制等级"); return; } if (targetLevel >= mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit) { CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_LevelUpMAX")); return; } targetLevel = mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit; RefreshAfterChangeValue(); RefreshLevelUpBtn(); } private void OnButton_MinusClick() { if (targetLevel <= mCharacterDataInfo.Level) { CommonUtils.ShowMessageTips("cultivate_LevelUpMIN"); return; } targetLevel--; RefreshAfterChangeValue(); RefreshLevelUpBtn(); } private void OnButton_PlusClick() { if(mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel)==null) { DebugUtil.LogError("没有配置Id {0} 突破等级 {1}",mCharacterDataInfo.ID, mCharacterDataInfo.BreakLevel); return; } if(targetLevel>= mCharacterBreak.Get((int)mCharacterDataInfo.ID,(int)mCharacterDataInfo.BreakLevel).LevelLimit) { CommonUtils.ShowMessageTips(CommonUtils.GetLocalizeText("cultivate_LevelUpMAX")); return; } targetLevel++; RefreshAfterChangeValue(); RefreshLevelUpBtn(); } private void OnButton_BackClick() { CloseWindow(); } private void LoadCfg() { OnLoadCfg(TableManager.Instance.Tables.CharacterLevelExp); } private void OnLoadCfg(CharacterLevelExp characterLevelExp) { mCharacterLevelExpCfg=characterLevelExp; mCharacterBreak = TableManager.Instance.Tables.CharacterBreak; RefreshUI(); RefreshAfterChangeValue(); } //invoke when open window protected override void OnOpenWindow(object data = null) { mCharacterDataInfo = data as CharacterDataInfo; if (mCharacterDataInfo != null) targetLevel = (int)mCharacterDataInfo.Level; LoadCfg(); expLast = 0; CommonUtils.SetImageBlur(GetComponent("blurObj")); InputManager.Instance.OnFingersMove += OnFingersHover; RegisterEvent(); } private void OnFingersHover(float delta) { } private void RefreshUI() { CommonUtils.RefreshCharacter2DPic(Image_Poster,mCharacterDataInfo.Cfg.RoleID, CommonUtils.ECharacterPicPathType.LevelUp); RefresLevelUpBar(mCharacterDataInfo.Level); RefreshLevelUpBtn(); } private void RefresLevelUpBar(uint targetRefreshLevel) { uint nowLevel =targetRefreshLevel; int maxLevel = (int)mCharacterBreak.Get((int)mCharacterDataInfo.ID, (int)mCharacterDataInfo.BreakLevel).LevelLimit; Text_Level_Now.text = nowLevel.ToString(); Text_Level_Max.text ="/" +maxLevel.ToString(); Text_Level_Value.text = targetRefreshLevel.ToString(); Text_Hp_Value.text = mCharacterDataInfo.HP().ToString(); Text_Morale_Value.text = mCharacterDataInfo.Cfg.MaxMorale.ToString(); Text_Defense_Value.text = mCharacterDataInfo.Defence().ToString(); Text_Armor_Value.text= mCharacterDataInfo.Armor().ToString(); Text_Attack_Value.text=mCharacterDataInfo.Attack().ToString(); Text_Speed_Value.text=mCharacterDataInfo.MoveSpeed().ToString(); Text_Exp_Value.text = Actor.Instance.Item.GetItemCount(GLConfig.Inst.data.HeroExpItem).ToString(); ; } private void RefreshAfterChangeValue() { float changeHp = mCharacterDataInfo.HpLevelUp((int)targetLevel) - mCharacterDataInfo.HpLevelUp((int)mCharacterDataInfo.Level); float changeMorale = 0; float changeDefense = mCharacterDataInfo.DefenceLevelUp((int)targetLevel)- mCharacterDataInfo.DefenceLevelUp((int)mCharacterDataInfo.Level); float changeArmor = 0; float changeAttack = mCharacterDataInfo.AttackLevelUp((int)targetLevel) - mCharacterDataInfo.AttackLevelUp((int)mCharacterDataInfo.Level); float changespeed = 0; Text_Change_Hp.gameObject.SetActive(changeHp != 0); Text_Change_Hp.text ="+"+ changeHp.ToString(); Text_Change_Morale.gameObject.SetActive(changeMorale != 0); Text_Change_Morale.text = "+" + changeMorale.ToString(); Text_Change_Defanse.gameObject.SetActive(changeDefense != 0); Text_Change_Defanse.text = "+" + changeDefense.ToString(); Text_Change_Armor.gameObject.SetActive(changeArmor != 0); Text_Change_Armor.text = "+" + changeArmor.ToString(); Text_Change_Attack.gameObject.SetActive(changeAttack != 0); Text_Change_Attack.text = "+" + changeAttack.ToString(); Text_Change_Speed.gameObject.SetActive(changespeed != 0); Text_Change_Speed.text = "+" + changespeed.ToString(); expLast=0; for (int i = (int)mCharacterDataInfo.Level; i < targetLevel; i++) { if (mCharacterLevelExpCfg.GetOrDefault((i + 1)) != null) { expLast += mCharacterLevelExpCfg.GetOrDefault((i + 1)).EXP; }else { DebugUtil.LogError("CharacterLevelExpCfg的等级不够了!!!"); } } Text_ExpNeed.gameObject.SetActive(expLast != 0); Text_ExpNeed.text = expLast.ToString(); Text_Level_Now.text = targetLevel.ToString(); Text_ExpBefore.text = mCharacterDataInfo.Exp.ToString(); } //invoke when reload window protected override void OnReloadWindow(object data = null) { } //invoke when close window protected override void OnCloseWindow() { UnregisterEvent(); EventManager.Instance.Send(EventManager.EventName.EN_UIControllCultivateMainInput, true); } }