| | |
| | | using System; |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using Cysharp.Threading.Tasks; |
| | | using UnityEngine; |
| | | using UnityEngine.UI; |
| | | |
| | |
| | | [SerializeField] UIEffectPlayer fightEffect; |
| | | [SerializeField] UIEffectPlayer openCloseAnim; |
| | | [SerializeField] FillTween cdTween; |
| | | [SerializeField] Transform nextCantAttackMask; |
| | | [SerializeField] Text hammerText; |
| | | |
| | | bool isFirstOpen = true; //首次打开 |
| | | [SerializeField] Text multiFightText; |
| | | |
| | | [SerializeField] Transform gameTip; //10连 |
| | | [SerializeField] Transform mgTip; |
| | | |
| | | bool isForcePlayFightUIAnim = true; //强制播放战斗锤子框动画 |
| | | |
| | | public static event Action TabChangeEvent; |
| | | protected override void InitComponent() |
| | | { |
| | | base.InitComponent(); |
| | | |
| | | avatarCell.button.AddListener(() => { }); |
| | | InGameDownLoad.Instance.OnPlayerLoginOk().Forget(); |
| | | avatarCell.SetOnLoaded(() => |
| | | { |
| | | avatarCell.redpoint.redpointId = MainRedDot.PhantasmPavilionRepoint; |
| | | avatarCell.SetListener(() => |
| | | { |
| | | UIManager.Instance.OpenWindowAsync<PlayerProfileWin>().Forget(); |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | void Display() |
| | |
| | | { |
| | | PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh; |
| | | AutoFightModel.Instance.OnFightEvent += OnSkillCast; |
| | | RenameManager.Instance.OnUpdateRenameResultEvent += OnUpdateRenameResultEvent; |
| | | UIManager.Instance.OnCloseWindow += OnCloseWindow; |
| | | GlobalTimeEvent.Instance.MSEvent += OnMSEvent; |
| | | RedpointCenter.Instance.redpointValueChangeEvent += OnRedpointValueChangeEvent; |
| | | var xbInfo = HappyXBModel.Instance.GetXBInfoByType((int)HappXBTitle.HeroCallAdvanced); |
| | | gameTip.SetActive(false); |
| | | if (xbInfo != null && xbInfo.treasureCount < GeneralDefine.herocall10TipLimit) |
| | | { |
| | | GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent; |
| | | } |
| | | EventBroadcast.Instance.AddListener<string>(EventName.BATTLE_START, OnBattleStart); |
| | | base.OnPreOpen(); |
| | | |
| | | mgTip.SetActive(false); |
| | | // 刷新UI |
| | | Display(); |
| | | |
| | | var temp = Debug.unityLogger.logEnabled; |
| | | Debug.unityLogger.logEnabled = true; |
| | | Debug.LogError("MainWin OnPreOpen 了 特殊标识"); |
| | | Debug.unityLogger.logEnabled = temp; |
| | | } |
| | | |
| | | protected override void OnPreClose() |
| | | { |
| | | PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh; |
| | | AutoFightModel.Instance.OnFightEvent -= OnSkillCast; |
| | | RenameManager.Instance.OnUpdateRenameResultEvent -= OnUpdateRenameResultEvent; |
| | | UIManager.Instance.OnCloseWindow -= OnCloseWindow; |
| | | GlobalTimeEvent.Instance.MSEvent -= OnMSEvent; |
| | | GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent; |
| | | EventBroadcast.Instance.RemoveListener<string>(EventName.BATTLE_START, OnBattleStart); |
| | | RedpointCenter.Instance.redpointValueChangeEvent -= OnRedpointValueChangeEvent; |
| | | |
| | | base.OnPreClose(); |
| | | isForcePlayFightUIAnim = true; |
| | | } |
| | | |
| | | private void OnUpdateRenameResultEvent() |
| | | { |
| | | Display(); |
| | | } |
| | | |
| | | void OnRedpointValueChangeEvent(int id) |
| | | { |
| | | if (id == (MainRedDot.RedPoint_Mingge * 10 + 4)) |
| | | { |
| | | mgTip.SetActive(MinggeManager.Instance.redpointAuto.state != RedPointState.None); |
| | | } |
| | | } |
| | | |
| | | |
| | | //用于10连提示,没有10连会取消时间事件委托 |
| | | void OnFiveSecondEvent() |
| | | { |
| | | if (HappyXBModel.Instance.bestXB10Red.state != RedPointState.None) |
| | | { |
| | | gameTip.SetActive(true); |
| | | } |
| | | else |
| | | { |
| | | gameTip.SetActive(false); |
| | | var xbInfo = HappyXBModel.Instance.GetXBInfoByType((int)HappXBTitle.HeroCallAdvanced); |
| | | if (xbInfo != null && xbInfo.treasureCount >= GeneralDefine.herocall10TipLimit) |
| | | { |
| | | GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | void DisplayTopBar() |
| | | { |
| | | topBar.SetActive(functionOrder == 0 || functionOrder == 2); |
| | | } |
| | | |
| | | |
| | | void OnCloseWindow(UIBase _ui) |
| | | { |
| | | if (_ui.name == "AutoFightWin") |
| | | { |
| | | multiFightText.text = Language.Get("MultiFight", AutoFightModel.Instance.fightCost); |
| | | } |
| | | if (_ui.name == "MinggeWin") |
| | | { |
| | | mgTip.SetActive(false); |
| | | } |
| | | } |
| | | |
| | | //战斗按钮动画 |
| | | void ClickAnimation(int index) |
| | | { |
| | | if (isFirstOpen || (functionOrder != 0 && index == 0)) |
| | | //强制播放 |
| | | if (isForcePlayFightUIAnim) |
| | | { |
| | | openCloseAnim.onComplete = () => |
| | | { |
| | | openCloseAnim.SetEnabled(true); |
| | | }; |
| | | openCloseAnim.PlayByArrIndex(index == 0 ? 1 : 0); |
| | | |
| | | isForcePlayFightUIAnim = false; |
| | | return; |
| | | } |
| | | |
| | | //切换显示 |
| | | if (functionOrder != 0 && index == 0) |
| | | { |
| | | //切回战斗场景 |
| | | openCloseAnim.onComplete = () => |
| | | { |
| | | openCloseAnim.SetEnabled(true); |
| | | }; |
| | | openCloseAnim.PlayByArrIndex(1); |
| | | isFirstOpen = false; |
| | | |
| | | } |
| | | else if (functionOrder == 0 && index != 0) |
| | | else if (functionOrder <= 0 && index != 0) |
| | | { |
| | | //切出战斗场景 |
| | | openCloseAnim.onComplete = () => |
| | | { |
| | | openCloseAnim.SetEnabled(true); |
| | |
| | | // 从玩家数据中获取信息并更新UI |
| | | avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, |
| | | PlayerDatas.Instance.baseData.face, |
| | | PlayerDatas.Instance.baseData.facePic)); |
| | | PlayerDatas.Instance.baseData.facePic)).Forget(); |
| | | |
| | | playerNameText.text = PlayerDatas.Instance.baseData.PlayerName; |
| | | powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); |
| | | |
| | | officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID); |
| | | officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID).Forget(); |
| | | } |
| | | |
| | | void PlayerDataRefresh(PlayerDataType type) |
| | |
| | | powerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower); |
| | | break; |
| | | case PlayerDataType.RealmLevel: |
| | | officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID); |
| | | officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID).Forget(); |
| | | break; |
| | | case PlayerDataType.Face: |
| | | case PlayerDataType.FacePic: |
| | | avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, |
| | | avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, |
| | | PlayerDatas.Instance.baseData.face, |
| | | PlayerDatas.Instance.baseData.facePic)); |
| | | PlayerDatas.Instance.baseData.facePic)).Forget(); |
| | | break; |
| | | case PlayerDataType.default26: |
| | | hammerText.text = UIHelper.GetMoneyCnt(41).ToString(); |
| | | break; |
| | | |
| | | case PlayerDataType.ExAttr3: |
| | | officialRankText.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID).Forget(); |
| | | break; |
| | | } |
| | | |
| | | } |
| | |
| | | { |
| | | if (currentSubUI != null && currentSubUI.name == "HomeWin") |
| | | { |
| | | fightEffect.Play(); |
| | | //手动自动一起处理 |
| | | AutoFightModel.Instance.StartFight(); |
| | | } |
| | |
| | | else if (index == 4 && !PlayerDatas.Instance.fairyData.HasFairy) |
| | | { |
| | | //未加入公会不切换标签,打开申请界面 |
| | | UIManager.Instance.OpenWindow<GuildJoinWin>(); |
| | | UIManager.Instance.OpenWindowAsync<GuildJoinWin>().Forget(); |
| | | return; |
| | | } |
| | | |
| | |
| | | if (index == 3) |
| | | { |
| | | //挑战特殊显示逻辑 |
| | | UIManager.Instance.OpenWindow<ChallengeTabWin>(); |
| | | UIManager.Instance.OpenWindowAsync<ChallengeTabWin>().Forget(); |
| | | return; |
| | | } |
| | | |
| | |
| | | { |
| | | return; |
| | | } |
| | | |
| | | TabChangeEvent?.Invoke(); |
| | | |
| | | |
| | | ClickAnimation(index); |
| | | // 更新当前选中的标签索引 |
| | | functionOrder = index; |
| | | TabChangeEvent?.Invoke(); |
| | | |
| | | DisplayTopBar(); |
| | | |
| | |
| | | /// <summary> |
| | | /// 根据标签索引打开对应的子界面 |
| | | /// </summary> |
| | | protected override void OpenSubUIByTabIndex() |
| | | protected override async void OpenSubUIByTabIndex() |
| | | { |
| | | |
| | | Debug.Log("打开子界面 : " + functionOrder); |
| | |
| | | // 打开主页界面 |
| | | if (!UIManager.Instance.IsOpened<BattleWin>()) |
| | | { |
| | | BattleWin battleWin = UIManager.Instance.OpenWindow<BattleWin>(); |
| | | BattleWin battleWin = await UIManager.Instance.OpenWindowAsync<BattleWin>(); |
| | | battleWin.SetBattleField(BattleManager.Instance.storyBattleField); |
| | | } |
| | | else |
| | |
| | | BattleWin battleWin = UIManager.Instance.GetUI<BattleWin>(); |
| | | battleWin.SetBattleField(BattleManager.Instance.storyBattleField); |
| | | } |
| | | currentSubUI = UIManager.Instance.OpenWindow<HomeWin>(); |
| | | currentSubUI = await UIManager.Instance.OpenWindowAsync<HomeWin>(); |
| | | break; |
| | | case 1: |
| | | currentSubUI = UIManager.Instance.OpenWindow<AffairBaseWin>(); |
| | | currentSubUI = await UIManager.Instance.OpenWindowAsync<AffairBaseWin>(); |
| | | break; |
| | | case 2: |
| | | currentSubUI = UIManager.Instance.OpenWindow<HeroBaseWin>(0); |
| | | if (gameTip.gameObject.activeSelf) |
| | | { |
| | | if (!NewBieCenter.Instance.inGuiding) |
| | | { |
| | | HappyXBModel.Instance.startTenCallGuide = true; |
| | | } |
| | | } |
| | | currentSubUI = await UIManager.Instance.OpenWindowAsync<HeroBaseWin>(0); |
| | | break; |
| | | // case 3: |
| | | // 挑战界面不跳转 |
| | | // Debug.Log("打开挑战界面"); |
| | | // break; |
| | | case 4: |
| | | currentSubUI = UIManager.Instance.OpenWindow<GuildBaseWin>(); |
| | | currentSubUI = await UIManager.Instance.OpenWindowAsync<GuildBaseWin>(); |
| | | break; |
| | | default: |
| | | Debug.LogWarning("未知的标签索引: " + functionOrder); |
| | |
| | | fightOtherWinBG.SetActive(false); |
| | | fightOtherWinWarnImg.SetActive(false); |
| | | fightBG.SetActive(true); |
| | | multiFightText.text = Language.Get("MultiFight", AutoFightModel.Instance.fightCost); |
| | | |
| | | |
| | | if (BattleManager.Instance.storyBattleField != null && |
| | |
| | | { |
| | | //非主城界面 |
| | | fightOtherWinBG.SetActive(true); |
| | | multiFightText.text = ""; |
| | | fightBG.SetActive(false); |
| | | if (BattleManager.Instance.storyBattleField != null && |
| | | BattleManager.Instance.storyBattleField.GetBattleMode() == BattleMode.Stop) |
| | |
| | | } |
| | | } |
| | | |
| | | void OnBattleStart(string guid) |
| | | { |
| | | if (string.IsNullOrEmpty(guid)) |
| | | { |
| | | var tmpHero = TeamManager.Instance.GetTeam(BattlePreSetType.Story).GetNextServerHero(""); |
| | | if (tmpHero != null) |
| | | { |
| | | AutoFightModel.Instance.fightingHeroSkinID = tmpHero.SkinID; |
| | | } |
| | | else |
| | | { |
| | | Debug.LogError("没有找到下一个攻击武将"); |
| | | return; |
| | | } |
| | | |
| | | fightHeroImg.SetOrgSprite(HeroSkinConfig.Get(AutoFightModel.Instance.fightingHeroSkinID).SquareIcon, "HeroHead"); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | void RefreshFightIng(bool isfighting = false) |
| | | { |
| | | if (isfighting) |
| | | { |
| | | fightEffect.Play(); |
| | | if (!fightEffect.isPlaying) |
| | | fightEffect.Play(); |
| | | nextCantAttackMask.localScale = Vector3.zero; |
| | | 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"); |
| | | var tmpHero = TeamManager.Instance.GetTeam(BattlePreSetType.Story).GetNextServerHero(AutoFightModel.Instance.heroGuid); |
| | | if (tmpHero != null) |
| | | { |
| | | AutoFightModel.Instance.fightingHeroSkinID = tmpHero.SkinID; |
| | | fightHeroImg.SetOrgSprite(HeroSkinConfig.Get(AutoFightModel.Instance.fightingHeroSkinID).SquareIcon, "HeroHead"); |
| | | nextCantAttackMask.localScale = Vector3.one; |
| | | } |
| | | }); |
| | | fightHeroScale.SetStartState(); |
| | | fightHeroScale.Play(); |
| | |
| | | |
| | | if (AutoFightModel.Instance.fightingHeroSkinID == 0) |
| | | { |
| | | AutoFightModel.Instance.fightingHeroSkinID = TeamManager.Instance.GetTeam(TeamType.Story).GetNextServerHero(AutoFightModel.Instance.heroGuid).SkinID; |
| | | var tmpHero = TeamManager.Instance.GetTeam(BattlePreSetType.Story).GetNextServerHero(AutoFightModel.Instance.heroGuid); |
| | | if (tmpHero != null) |
| | | { |
| | | AutoFightModel.Instance.fightingHeroSkinID = tmpHero.SkinID; |
| | | } |
| | | else |
| | | { |
| | | Debug.LogError("没有找到下一个攻击武将"); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | fightHeroImg.SetOrgSprite(HeroSkinConfig.Get(AutoFightModel.Instance.fightingHeroSkinID).SquareIcon, "HeroHead"); |
| | | } |
| | | |
| | | void OnMSEvent() |
| | | { |
| | | if (nextCantAttackMask.localScale == Vector3.one) |
| | | { |
| | | if (BattleManager.Instance.storyBattleField != null && BattleManager.Instance.storyBattleField.IsCanRequestFight()) |
| | | { |
| | | nextCantAttackMask.localScale = Vector3.zero; |
| | | } |
| | | } |
| | | } |
| | | |
| | | void OnSkillCast(bool isfighting) |
| | |
| | | //外部调用点击功能 |
| | | public void ClickFunc(int functionOrder) |
| | | { |
| | | tabButtons[functionOrder].SelectBtn(); |
| | | tabButtons[functionOrder].onClick.Invoke(); |
| | | } |
| | | |
| | |
| | | //恢复功能按钮状态 |
| | | public void RestoreFuncBtn() |
| | | { |
| | | if (functionOrder == -1) |
| | | { |
| | | if (lastWinOrder == -1) |
| | | { |
| | | functionOrder = 0; |
| | | } |
| | | else |
| | | { |
| | | functionOrder = lastWinOrder; |
| | | } |
| | | } |
| | | |
| | | |
| | | tabButtons[functionOrder].SelectBtn(); |
| | | } |
| | | |
| | |
| | | currentSubUI.CloseWindow(); |
| | | currentSubUI = null; |
| | | functionOrder = -1; |
| | | isForcePlayFightUIAnim = true; |
| | | DisplayTopBar(); |
| | | } |
| | | } |
| | | |
| | | // 外部恢复子界面 |
| | | public void RestoreSubUI() |
| | | { |
| | | if (functionOrder != -1) |
| | | { |
| | | if (currentSubUI != null && currentSubUI.IsActive()) |
| | | { |
| | | //点击挑战标签又关闭时,会触发 RestoreFuncBtn 造成 |
| | | return; |
| | | } |
| | | } |
| | | |
| | | if (functionOrder != -1) |
| | | { |
| | | //主动点击功能栏的情况 |
| | | lastWinOrder = functionOrder; |
| | | } |
| | | |
| | | //lastWinOrder 是默认恢复使用 |
| | | if (lastWinOrder == -1) |
| | | { |
| | | lastWinOrder = 0; |
| | | } |
| | | |
| | | OnTabButtonClicked(lastWinOrder); |
| | | } |
| | | |
| | | |
| | | |
| | | #endregion |
| | | } |