using System.Collections.Generic; using System.Linq; using cfg.CharacterCfg; using cfg.LevelCfg; using Cysharp.Threading.Tasks; using Framework; using Gameplay; using Gameplay.Character; using Gameplay.Level; using Gameplay.Net; using Gameplay.Unit; using NLDPB; using TMPro; using UnityEngine; using UnityEngine.UI; using Image = UnityEngine.UI.Image; public class UIPassGameController : UIWindow { //UI GameObj ///Auto Gen Start/// public Image Image_WinBG; public Image Image_PosterLu; public Image Image_TextRect; public TMP_Text Text_Win; public Image Image_BlueBar; public TMP_Text Text_LevelNum; public TMP_Text Text_LevelName; public TMP_Text Text_FightTime; public Image Image_Clock; public TMP_Text Text_Time; public TMP_Text Text_CharacterID; public TMP_Text Text_CharacterLV; public Image Image_EXEmpty; public Image Image_EXFull; public TMP_Text Text_EX; public TMP_Text Text_LVUp; public TMP_Text Text_Target; public Image Image_DownShadow; public TMP_Text Text_GeneralEX; public Image Image_ELogo; public TMP_Text Text_EXPHave; public TMP_Text Text_EXPGet; ///Auto Gen End/// public static async UniTask Open(ItemList itemList) { return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UIPassGame, itemList); } /// /// 高斯模糊遮罩 /// private RawImage rawImageGaussianBlurMask; /// /// 台词文本 /// private TMP_Text textDialogue; /// /// 角色名 /// private TMP_Text textName; private List _imgWinStar; private List _imageFailedStart; private List _aimObjList; private int _levelID; private List _itemHeadList; private List _charIDs; private ItemList _itemList; /// /// 台词语音 /// private Audio dialogueAudio; /// /// 是否正在播放台词语音 /// public bool IsDialoguePlaying { get { return dialogueAudio != null && dialogueAudio.IsPlaying; } } public override void PreLoad(object data = null) { base.PreLoad(data); if (data != null) { _itemList = data as ItemList; } } // Use this for initialization public override void OnInit() { //bind UI GameObj UIPassGameBinder.GetComponents(this); textName = GetComponent("Image_WinBG/Image_PosterLu/Image_ActorLineBG/Text_Name"); textDialogue = GetComponent("Image_WinBG/Image_PosterLu/Image_ActorLineBG/Text_Describe"); rawImageGaussianBlurMask = GetComponent("GaussianBlurMask"); rawImageGaussianBlurMask.texture = CommonUtils.screenTexture; BindButton("Button_Close", _OnClickClose); _imgWinStar = new List(); _imageFailedStart = new List(); _aimObjList = new List(); _itemHeadList = new List(); _charIDs = new List(); for (int i = 0; i < 3; i++) { var img = GetComponent("Image_WinBG/MissionDetail/ImageMissionBar" + i + "/ImageWinStart"); var imgFail = GetComponent("Image_WinBG/MissionDetail/ImageMissionBar" + i + "/ImageFailedStart"); _imgWinStar.Add(img); _imageFailedStart.Add(imgFail); _aimObjList.Add(FindObj("Image_WinBG/MissionDetail/ImageMissionBar" + i)); } for (int i = 0; i < 7; i++) { var go = FindObj("Image_WinBG/HeroLevelUp/Image_DownShadow/ItemHead" + i); _itemHeadList.Add(go); } } private async void _Refresh() { var team = LevelManager.Instance.SettleData.Team; var charIDArray = team.GetCharacterIDs(); for (int i = 0; i < charIDArray.Length; i++) { if (charIDArray[i] != Team.NONE_ID) { _charIDs.Add(charIDArray[i]); } } _RefreshInfo(); _RefreshMissionDetail(); _RefreshCommonExp(); _RefreshHeads(); if (charIDArray.Count() > 0) { int id = (int)charIDArray[0]; DataCharacterAttri dataCharacterAttri = TableManager.Instance.Tables.CharacterAttri.Get(id); if (dataCharacterAttri == null) { DebugUtil.LogError($"获取角色配置失败,id:{id}"); return; } textName.text = CommonUtils.GetLocalizeText(dataCharacterAttri.Name); dialogueAudio = await DialogueManager.Instance.PlayDiaogue(id, cfg.DialogueCfg.E_DialogueType.LevelWin, (content) => { textDialogue.text = content; }); } } //invoke when open window protected override void OnShowWindow(object data) { _levelID = LevelManager.Instance.SettleData.LevelID; _Refresh(); } protected override void OnUpdate() { base.OnUpdate(); Image_TextRect.gameObject.IsScaleShow(IsDialoguePlaying); } protected override void OnHideWindow() { AudioManager.Instance.AudioMgrObj.StopAllSounds(); base.OnHideWindow(); } #region RefreshWindow private void _RefreshInfo() { _RefreshMapDetail(); } private void _RefreshMapDetail() { _RefreshTime(); _RefreshLevelInfo(); _RefreshPlayerInfo(); } private async void _RefreshLevelInfo() { var level = LevelManager.Instance.CurrLevel; var levelName = level.Name; Text_LevelName.text = levelName; Text_LevelNum.text = level.ID.ToString(); } private void _RefreshTime() { var minutes = TeamManager.Instance.GetFightPastMinute(); var seconds = TeamManager.Instance.GetFightPastSecond(); var timeStr = ""; if (minutes < 10) { timeStr += minutes; } else { timeStr += "0"; timeStr += minutes; } timeStr += ":"; if (minutes < 10) { timeStr += seconds; } else { timeStr += "0"; timeStr += seconds; } Text_Time.text = timeStr; } private void _RefreshPlayerInfo() { var playerID = Actor.Instance.Base.GetProp(ActorProp.ActorId); var playerLv = Actor.Instance.Base.GetProp(ActorProp.Level); Text_CharacterID.text = playerID.ToString(); Text_CharacterLV.text = "LV:" + playerLv; var actorCfg = ActorLevelTableHelper.Instance.Get((int)playerLv); var max = actorCfg.Exp; var cur = Actor.Instance.Base.GetProp(ActorProp.Exp); var process = (float)cur / max; var oldLvExp = LevelManager.Instance.SettleData.PlayerLvExp; var lvDiff = playerLv - oldLvExp.Lv; var oldLv = oldLvExp.Lv; int add = _CalculateExp(); Text_LVUp.text = "+" + add; Text_EX.text = cur + "/" + max; Image_EXFull.fillAmount = process; } private int _CalculateExp() { int retExp = 0; var oldExp = LevelManager.Instance.SettleData.PlayerLvExp.Exp; var oldLv = LevelManager.Instance.SettleData.PlayerLvExp.Lv; var curLv = Actor.Instance.Base.GetProp(ActorProp.Level); var curExp = Actor.Instance.Base.GetProp(ActorProp.Exp); if (oldLv < curLv) { var oldActorLvCfg = ActorLevelTableHelper.Instance.Get((int)oldLv); retExp += oldActorLvCfg.Exp - (int)oldExp; for (uint i = oldLv + 1; i < curLv; i++) { var expCfg = ActorLevelTableHelper.Instance.Get((int)i); retExp += expCfg.Exp; } retExp += (int)curExp; } else { retExp += (int)(curExp - oldExp); } return retExp; } private void _RefreshMissionDetail() { _RefreshStars(); _RefreshAimInfo(); } private void _RefreshStars() { var starCount = LevelManager.Instance.CurrentLevel.StarCount; for (int i = 0; i < _imgWinStar.Count; i++) { var isFinish = LevelManager.Instance.CurrentLevel.GetStarIsSuccess(i); _imgWinStar[i].gameObject.SetActive(isFinish); _imageFailedStart[i].gameObject.SetActive(!isFinish); } } private void _RefreshAimInfo() { var levelInfo = LevelManager.Instance.GetLevelInfoByID(_levelID); var levelCfg = TableManager.Instance.Tables.Level.GetOrDefault(_levelID); var levelRewardID = new List>(3); if (levelCfg != null) { levelRewardID.Add(new List(levelCfg.StarRewardID1)); levelRewardID.Add(new List(levelCfg.StarRewardID2)); levelRewardID.Add(new List(levelCfg.StarRewardID3)); } var txtContent = ""; for (int i = 0; i < _aimObjList.Count; i++) { var aimObj = _aimObjList[i]; var txtDesc = CommonUtils.GetComponent(aimObj, "TextDescribe"); var txtGetItem = CommonUtils.GetComponent(aimObj, "TextGetItem"); txtDesc.text = LevelManager.Instance.CurrentLevel.GetStarTargetLocalization(i); // if (levelCfg != null) // { // var levelRewardL = levelRewardID[i]; // if (levelRewardL.Count > 0) // { // // for (int j = 0; j < levelRewardL.Count; j++) // { // var reward = RewardManager.Instance.Get(levelRewardL[j]); // var itemList = reward.ItemList; // for (int n = 0; n < itemList.Count; n++) // { // var list = itemList.Get(); // var itemID = list[n].ID; // var itemCfg = TableManager.Instance.Tables.Item.GetOrDefault(itemID); // if (itemCfg != null) // { // var name = CommonUtils.GetLocalizeText(itemCfg.NameLocal); // txtContent += name + "+" + list[n].Count; // } // } // } // } // } txtGetItem.text = txtContent; } } private void _RefreshCommonExp() { var list = _itemList.Lists; int itemCount = 0; for (var i = ItemSource.LevelPassNormal; i <= ItemSource.LevelPassStar3; i++) { itemCount += _CalculateExpItemCount(list[(int)i]); } var settleData = LevelManager.Instance.SettleData; Text_EXPHave.text = settleData.CommonExp.ToString(); Text_EXPGet.text = "+" + itemCount; } private int _CalculateExpItemCount(ItemCounts itemCounts) { int retCount = 0; if (itemCounts.Ids.Count > 0) { var idx = itemCounts.Ids.IndexOf(3); if (idx >= 0) { var count = itemCounts.Counts[idx]; retCount = (int)count; } } return retCount; } private void _RefreshHeads() { for (int i = 0; i < _itemHeadList.Count; i++) { _RefreshHead(i); } } private void _RefreshHead(int idx) { var item = _itemHeadList[idx]; if (idx >= _charIDs.Count) { item.SetActive(false); return; } item.SetActive(true); var uid = _charIDs[idx]; var headNode = CommonUtils.GetComponent(item, "HeadNode"); if (headNode) { var headInfo = new UIHeadInfo(uid); headNode.SetData(headInfo); headNode.Refresh(false); } var txtExpAdd = CommonUtils.GetComponent(item, "ImageHeroEXpEmpty/TextHeroEXPUp"); var imgExpProcess = CommonUtils.GetComponent(item, "ImageHeroEXpEmpty/ImageHeroEXpFull"); var txtLv = CommonUtils.GetComponent(item, "TextHeroLV"); var addExp = _CalculateCharExpAdd(uid); if (addExp > 0) { txtExpAdd.text = "+" + addExp; } else { txtExpAdd.text = ""; } if (CharacterDataInfoManager.Instance.DataDic.TryGetValue(uid, out var charDataInfo)) { var cur = charDataInfo.Exp; var cfg = TableManager.Instance.Tables.CharacterLevelExp.GetOrDefault((int)charDataInfo.Level); var process = (float)cur / cfg.EXP; imgExpProcess.fillAmount = process; txtLv.text = "LV" + charDataInfo.Level; } var imgLikely = CommonUtils.GetComponent(item, "ImageFavorate"); var txtLikely = CommonUtils.GetComponent(item, "ImageFavorate/TextFavorateEXp"); var likely = _CalculateLikely(uid); if (likely > 0) { txtLikely.text = "+" + likely; imgLikely.gameObject.SetActive(true); } else { imgLikely.gameObject.SetActive(false); } } #endregion #region Data private uint _CalculateCharExpAdd(uint roleID) { uint add = 0; var lvExp = LevelManager.Instance.SettleData.ExpDic[roleID]; if (CharacterDataInfoManager.Instance.DataDic.TryGetValue(roleID, out var charDataInfo)) { var oldLv = lvExp.Lv; var oldExp = lvExp.Exp; var curLv = charDataInfo.Level; var curExp = charDataInfo.Exp; if (oldLv < curLv) { var expCfg = TableManager.Instance.Tables.CharacterLevelExp.GetOrDefault((int)oldLv); add += (uint)expCfg.EXP - oldExp; for (uint i = oldLv + 1; i < curLv; i++) { var cfg = TableManager.Instance.Tables.CharacterLevelExp.GetOrDefault((int)i); add += (uint)cfg.EXP; } add += curExp; } else { add += curExp - oldExp; } } return add; } private uint _CalculateLikely(uint roleID) { uint retCount = 0; var lvExp = LevelManager.Instance.SettleData.FavorDic[roleID]; if (CharacterDataInfoManager.Instance.DataDic.TryGetValue(roleID, out var charDataInfo)) { var oldExp = lvExp.Exp; var oldLv = lvExp.Lv; var curLv = charDataInfo.LikelyLevel; var curExp = charDataInfo.LikelyExp; if (oldLv < curLv) { var expCfg = TableManager.Instance.Tables.CharacterLikability.Get((int)roleID, (int)oldLv); retCount += (uint)expCfg.LikabilityExp - oldExp; for (uint i = oldLv + 1; i < curLv; i++) { var cfg = TableManager.Instance.Tables.CharacterLikability.Get((int)roleID, (int)i); retCount += (uint)cfg.LikabilityExp; } retCount += curExp; } else { retCount += curExp - oldExp; } } return retCount; } #endregion private async void _OnClickClose() { await UI_GetItemSettleController.Open(_itemList); CloseWindow(); } }