using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// /// 游戏主界面底部功能按钮 /// public class MainWin : FunctionsBaseWin { //头像区 [SerializeField] GameObject topBar; [SerializeField] AvatarCell avatarCell; [SerializeField] Text playerNameText; [SerializeField] Text powerText; [SerializeField] OfficialTitleCell officialRankText; //战斗按钮 [SerializeField] Image fightOtherWinBG; //切换其他界面的显示 [SerializeField] Image fightOtherWinWarnImg; //切换其他界面 如果是战斗中泛红提示 [SerializeField] GameObject fightBG; //战斗界面显示 [SerializeField] Image restImg; //休息状态 [SerializeField] GameObject fightGo; //战斗状态 [SerializeField] Image fightHeroImg; //战斗显示英雄 [SerializeField] ScaleTween fightHeroScale; //战斗显示英雄缩放 [SerializeField] UIEffectPlayer fightEffect; [SerializeField] FillTween cdTween; public Text hammerText; protected override void InitComponent() { base.InitComponent(); avatarCell.button.AddListener(() => { }); } public override void Refresh() { UpdateCurrency(); UpdatePlayerInfo(); RefreshFightBtn(); } protected override void OnPreOpen() { PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh; AutoFightModel.Instance.OnFightEvent += OnSkillCast; base.OnPreOpen(); // 刷新UI Refresh(); } protected override void OnPreClose() { PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh; AutoFightModel.Instance.OnFightEvent -= OnSkillCast; base.OnPreClose(); } protected override void SelectBottomTab(int index) { if (index == 3) { //挑战特殊显示逻辑 return; } topBar.SetActive(index == 0 || index == 2); // 如果点击当前已选中的标签,不做处理 if (functionOrder == index && currentSubUI != null) { return; } // 更新当前选中的标签索引 functionOrder = index; // 关闭当前打开的子界面 CloseCurrentSubUI(); // 根据选中的标签打开对应的界面 OpenSubUIByTabIndex(); } /// /// 更新玩家信息 /// private void UpdatePlayerInfo() { // 从玩家数据中获取信息并更新UI avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic)); playerNameText.text = PlayerDatas.Instance.baseData.PlayerName; powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID); } void PlayerDataRefresh(PlayerDataType type) { switch (type) { case PlayerDataType.FightPower: powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); break; case PlayerDataType.RealmLevel: officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID); break; case PlayerDataType.Face: case PlayerDataType.FacePic: avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic)); break; case PlayerDataType.default26: hammerText.text = UIHelper.GetMoneyCnt(41).ToString(); break; } } /// /// 更新货币信息 /// private void UpdateCurrency() { hammerText.text = UIHelper.GetMoneyCnt(41).ToString(); } /// /// 底部标签按钮点击 /// protected override void OnTabButtonClicked(int index) { if (index == 0) { if (currentSubUI != null && currentSubUI.name == "HomeWin") { //手动自动一起处理 AutoFightModel.Instance.StartFight(); } } SelectBottomTab(index); } /// /// 根据标签索引打开对应的子界面 /// protected override void OpenSubUIByTabIndex() { Debug.Log("打开子界面 : " + functionOrder); // 主城 内政 武将 挑战 公会 //根据索引打开不同的界面 switch (functionOrder) { case 0: // 打开主页界面 if (!UIManager.Instance.IsOpened()) { BattleWin battleWin = UIManager.Instance.OpenWindow(); battleWin.SetBattleField(BattleManager.Instance.storyBattleField); } else { BattleWin battleWin = UIManager.Instance.GetUI(); battleWin.SetBattleField(BattleManager.Instance.storyBattleField); } currentSubUI = UIManager.Instance.OpenWindow(); Debug.Log("打开主城界面"); break; case 1: currentSubUI = UIManager.Instance.OpenWindow(); Debug.Log("打开内政界面"); break; case 2: currentSubUI = UIManager.Instance.OpenWindow(0); Debug.Log("打开武将界面"); break; // case 3: // // currentSubUI = UIManager.Instance.OpenUI(); // Debug.Log("打开挑战界面"); // break; case 4: currentSubUI = UIManager.Instance.OpenWindow(); break; default: Debug.LogWarning("未知的标签索引: " + functionOrder); break; } RefreshFightBtn(); } ///战斗按钮显示规则 /// 1.在主线战斗界面下: /// 1.1.休息状态的按钮 /// 1.2.战斗状态的按钮 :显示下一个要攻击的武将头像,按位置顺序推算显示头像;严谨情况下需判断下一个武将是否可攻击如被眩晕等 /// 有蒙版:默认显示播放其他战斗的状态,眩晕的状态等比较多(大多是蒙版显示的情况,根据实际看是否需要) /// 无蒙版:结束一个小通知的时候(B425)可以释放的去掉蒙版;有怒气的时候是否特殊表现(循环火特效?) /// 转圈:点击释放 播放特效且蒙版转圈,转圈结束后显示蒙版 -- 同时上方卡牌播放特效和转圈? /// 2.在非主线战斗界面下: /// 1. 休息显示关闭状态 无特效 /// 2. 战斗中,显示泛红特效 /// 上方卡牌 攻击时播放特效和转圈,有怒气的时候显示怒气特效? void RefreshFightBtn() { if (functionOrder == 0) { //主城界面 fightOtherWinBG.SetActive(false); fightBG.SetActive(true); if (BattleManager.Instance.storyBattleField != null && BattleManager.Instance.storyBattleField.GetBattleMode() == BattleMode.Stop) { fightGo.SetActive(false); restImg.SetActive(true); } else { fightGo.SetActive(true); restImg.SetActive(false); RefreshFightIng(); } } else { //非主城界面 fightOtherWinBG.SetActive(true); fightBG.SetActive(false); if (BattleManager.Instance.storyBattleField != null && BattleManager.Instance.storyBattleField.GetBattleMode() == BattleMode.Stop) { fightOtherWinWarnImg.SetActive(false); } else { fightOtherWinWarnImg.SetActive(true); } } } void RefreshFightIng(bool isfighting = false) { if (isfighting) { fightEffect.Play(); cdTween.SetStartState(); cdTween.Play(() => { AutoFightModel.Instance.fightingHeroSkinID = TeamManager.Instance.GetTeam(TeamType.Story).GetNextServerHero(AutoFightModel.Instance.heroGuid).SkinID; fightHeroImg.SetOrgSprite(HeroSkinConfig.Get(AutoFightModel.Instance.fightingHeroSkinID).SquareIcon, "HeroHead"); }); fightHeroScale.SetStartState(); fightHeroScale.Play(); } else { fightEffect.Stop(); cdTween.Stop(); cdTween.SetEndState(); fightHeroScale.Stop(); } if (AutoFightModel.Instance.fightingHeroSkinID == 0) { AutoFightModel.Instance.fightingHeroSkinID = TeamManager.Instance.GetTeam(TeamType.Story).GetNextServerHero(AutoFightModel.Instance.heroGuid).SkinID; } fightHeroImg.SetOrgSprite(HeroSkinConfig.Get(AutoFightModel.Instance.fightingHeroSkinID).SquareIcon, "HeroHead"); } void OnSkillCast(bool isfighting) { if (functionOrder != 0) return; if (isfighting) { RefreshFightIng(isfighting); } else { RefreshFightBtn(); } } }